package com.ga.batch.settlement.domain;

import com.ga.common.system.SystemConfigService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 환수채권 연체이자 계산기 (V125).
 * 당월 적립 연체이자 = 잔액 × (연이자율 / 100 / 12), HALF_UP scale 0(원).
 * 이자율 0(기본값) 이면 0 반환 → 기존 동작과 동일(안전 폴백).
 *
 * 적립은 매 정산월 1개월분이며, 잔액 기준이므로 월복리로 누적된다.
 */
@Component
@RequiredArgsConstructor
public class ClawbackInterestCalculator {

    private final SystemConfigService configService;

    /** 당월 적립 연체이자. 잔액·이자율이 0 이하이면 0. */
    public BigDecimal monthlyInterest(BigDecimal balance) {
        BigDecimal annualRate = configService.getDecimal("CLAWBACK_OVERDUE_INTEREST_RATE", BigDecimal.ZERO);
        if (annualRate.signum() <= 0 || balance == null || balance.signum() <= 0) {
            return BigDecimal.ZERO;
        }
        return balance.multiply(annualRate)
                .divide(BigDecimal.valueOf(1200), 0, RoundingMode.HALF_UP);
    }

    /** 연체이자 거치기간(개월) — 발생 후 N개월 경과부터 적립. 기본 0. */
    public int graceMonths() {
        return configService.getInt("CLAWBACK_INTEREST_GRACE_MONTHS", 0);
    }
}
