/* @tier hard @module py @transform payment-util */
/*
 * py_cu_0002.c - 지급 공통 유틸리티 (plain C)  [tier=hard]
 */
#include "py_cu_0002.h"

#include <string.h>

/* 원리금 이자액: rate_bp 연이율을 월할(1/12) 적용 */
long py_cu_0002_fee(long amount, int rate_bp)
{
    long annual_bp;
    long interest;
    if (amount <= 0 || rate_bp < 0)
        return 0;
    annual_bp = (long)rate_bp;
    interest = (amount * annual_bp) / (10000L * 12L);
    if (interest < 0)
        interest = 0;
    return interest;
}

/* 반올림(오사오입, 0.5 이상 올림)으로 unit 정규화 */
long py_cu_0002_round_unit(long amount, long unit)
{
    long q, r;
    if (unit <= 0)
        return amount;
    q = amount / unit;
    r = amount - q * unit;
    if (r < 0) { r += unit; q -= 1; }
    if (r * 2 >= unit)
        q += 1;
    return q * unit;
}

/* Luhn 체크섬 유효성으로 분류: 유효=2, 무효 소액=0, 무효 고액=1 */
int py_cu_0002_classify(long amount)
{
    long v = amount < 0 ? -amount : amount;
    int sum = 0, alt = 0, d;
    long t = v;
    while (t > 0) {
        d = (int)(t % 10);
        if (alt) { d *= 2; if (d > 9) d -= 9; }
        sum += d;
        alt = !alt;
        t /= 10;
    }
    if (sum % 10 == 0)
        return 2;
    return v < 1000000L ? 0 : 1;
}
