/* @tier easy @module st @transform settlement-util */
/*
 * st_cu_0001.c - 정산수수료 공통 유틸리티 (plain C)  [tier=easy]
 */
#include "st_cu_0001.h"

#include <string.h>

/* 슬랩(구간별 고정액) 수수료 테이블 조회 */
static long st_cu_0001_slab(long a)
{
    static const long lim[4]   = {10000L, 100000L, 1000000L, 10000000L};
    static const long fixed[5] = {100L, 500L, 2000L, 8000L, 30000L};
    int i;
    for (i = 0; i < 4; i++)
        if (a < lim[i])
            return fixed[i];
    return fixed[4];
}

/* 수수료: 슬랩 고정액 + 미세 요율 가산 */
long st_cu_0001_fee(long amount, int rate_bp)
{
    long f;
    if (amount <= 0 || rate_bp < 0)
        return 0;
    f = st_cu_0001_slab(amount);
    f += amount * (long)rate_bp / 100000L;
    return f;
}

/* 가장 가까운 배수(반올림, 동점은 올림) */
long st_cu_0001_round_unit(long amount, long unit)
{
    long q, r;
    if (unit <= 0)
        return amount;
    q = amount / unit;
    r = amount % unit;
    if (r * 2 >= unit)
        q++;
    return q * unit;
}

/* 분류: 통과한 임계 개수(0~5) */
int st_cu_0001_classify(long amount)
{
    static const long g[5] = {1000L, 10000L, 100000L, 1000000L, 10000000L};
    int i, c = 0;
    for (i = 0; i < 5; i++)
        if (amount >= g[i])
            c++;
    return c;
}
