/*
 * cl_tierstat_batch.pgc - cl 마감 총액 구간 분포 배치 (CASE 집계 + XA).
 *
 * period_key 프리픽스 마감을 총액 소/중/대 구간으로 CASE 분류하여 각 구간 건수를
 * 한 행으로 집계해 보고한다. ONE global XA transaction (read-committed).
 * host 변수는 전용 카피북 cl_tierstat_cpy.h 를 EXEC SQL INCLUDE.
 * Usage: cl_tierstat_batch [YYYY-MM]
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <atmi.h>

int main(int argc, char **argv)
{
    const char *prefix = (argc > 1) ? argv[1] : "2026-07";

    EXEC SQL INCLUDE cl_tierstat_cpy;

    strncpy(t_prefix, prefix, sizeof(t_prefix)-1); t_prefix[sizeof(t_prefix)-1] = 0;

    if (tpinit(NULL) < 0) { fprintf(stderr, "tpinit FAIL: %s\n", tpstrerror(tperrno)); return 1; }
    if (tpopen() < 0)     { fprintf(stderr, "tpopen FAIL: %s\n", tpstrerror(tperrno)); return 1; }
    if (tpbegin(60, 0) < 0) { fprintf(stderr, "tpbegin FAIL: %s\n", tpstrerror(tperrno)); return 1; }

    EXEC SQL SELECT
        coalesce(sum(CASE WHEN total_amount < 1000000 THEN 1 ELSE 0 END),0),
        coalesce(sum(CASE WHEN total_amount >= 1000000 AND total_amount < 100000000 THEN 1 ELSE 0 END),0),
        coalesce(sum(CASE WHEN total_amount >= 100000000 THEN 1 ELSE 0 END),0)
        INTO :t_lo, :t_mid, :t_hi FROM cl_close_log
        WHERE period_key LIKE :t_prefix || '%' AND status <> 'X';
    if (sqlca.sqlcode < 0) { fprintf(stderr, "AGG FAIL [%d] %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); tpabort(0); return 1; }

    if (tpcommit(0) < 0) { fprintf(stderr, "tpcommit FAIL: %s\n", tpstrerror(tperrno)); tpabort(0); return 1; }
    printf(">>> cl_tierstat_batch COMMIT: prefix=%s 소=%ld 중=%ld 대=%ld\n", prefix, t_lo, t_mid, t_hi);

    tpclose(); tpterm();
    return 0;
}
