/*
 * cl_tentclose_batch.pgc - cl 가마감(잠정) 배치 (접수/대사 잠정집계 + TENT(O) + XA).
 *
 * 당일 접수(A)/대사완료(M) 매입을 잠정 집계해 가마감(status=O) 이력을 1건 기록한다.
 * host 변수는 전용 카피북 cl_tentclose_cpy.h 를 EXEC SQL INCLUDE 로 가져온다.
 * Usage: cl_tentclose_batch [YYYY-MM-DD]
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <atmi.h>
#include "cl_dbio.h"

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

    EXEC SQL INCLUDE cl_tentclose_cpy;

    strncpy(tc_bizdate, bizdate, sizeof(tc_bizdate)-1); tc_bizdate[sizeof(tc_bizdate)-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 count(*), coalesce(sum(amount),0) INTO :tc_cnt, :tc_amt
        FROM purchase WHERE biz_date = :tc_bizdate AND status IN ('A','M');
    if (sqlca.sqlcode < 0) { tpabort(0); return 1; }

    cid = cldb_next_close_id();
    if (cid < 0) { tpabort(0); return 1; }
    if (cldb_insert_close(cid, "TENT", bizdate, bizdate, "O", tc_cnt, tc_amt, "가마감(배치)") < 0) {
        tpabort(0); return 1;
    }

    if (tpcommit(0) < 0) { fprintf(stderr, "tpcommit FAIL: %s\n", tpstrerror(tperrno)); tpabort(0); return 1; }
    printf(">>> cl_tentclose_batch COMMIT: %s 가마감 cid=%ld 잠정건수=%ld\n", bizdate, cid, tc_cnt);

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