/*
 * cm_dbio.h - cm 모듈 (공통) DB 접근 계층 (libcmdbio.a).
 * ECPG (EXEC SQL) functions compiled into a static library and linked into
 * cm_svr and the cm batches. They run on the caller's XA branch/connection
 * (no EXEC SQL CONNECT); sqlca is the shared per-thread ECPG SQLCA.
 * Return convention: 0 = ok, -1 = SQL error / not found (caller inspects sqlca).
 */
#ifndef CM_DBIO_H
#define CM_DBIO_H

/* 공통코드 (cm_code) */
int  cmdb_get_code_name(const char *grp, const char *code, char *out /* >= 128 */);
int  cmdb_code_exists(const char *grp, const char *code);   /* 1=존재, 0=없음, -1=오류 */
int  cmdb_insert_code(const char *grp, const char *code, const char *name, long sort);
long cmdb_count_codes(const char *grp);

/* 공통 파라미터 (cm_param) */
int  cmdb_get_param(const char *key, char *out /* >= 128 */);
int  cmdb_set_param(const char *key, const char *val);

/* 채번 (cm_seq) - 이름있는 카운터 +1 -> 새 값 */
long cmdb_next_seq(const char *name);

/* 환율 (cm_fx_rate) - 통화의 최신 기준일 rate_bps 조회 */
int  cmdb_get_fx_rate(const char *ccy, const char *base_date, long *rate_out);

/* 휴일 (cm_holiday) - 1=휴일, 0=평일, -1=오류 */
int  cmdb_is_holiday(const char *date);

/* 공통 로그 (cm_log) */
long cmdb_log(const char *svc, const char *level, const char *msg, const char *bizdate);


/* ----- expanded query/analytics dbio (each in its own cm_*_dbio.pgc) ----- */
long cmdb_fx_rate_sum(const char *bizdate);                              /* 기준일 환율 합계. */
long cmdb_log_level_count(const char *status);                           /* 로그 레벨별 건수. */
long cmdb_fx_spread(const char *bizdate);                                /* 환율 최대-최소 스프레드. */
long cmdb_log_err_ratio(const char *bizdate);                            /* 오류 로그 비율(bps). */
long cmdb_log_svc_rollup(const char *bizdate);                           /* 서비스별 로그 커서 누적. */
long cmdb_fx_avg(const char *bizdate);                                   /* 환율 평균. */
long cmdb_log_err_idsum(const char *bizdate);                            /* 오류 로그 ID 조건 합. */
long cmdb_log_purge_debug(const char *bizdate);                          /* 디버그 로그 삭제. */
long cmdb_log_archive(const char *bizdate);                              /* 정보 로그 보관(A) 전이. */
int cmdb_holiday_present(const char *key);                               /* 휴일 등록 존재 여부. */
int cmdb_log_message(long id, char *out);                                /* 로그 ID 메시지 조회. */
long cmdb_fx_sq_sum(const char *bizdate);                                /* 환율 제곱 가중 합(커서). */
long cmdb_fx_peak_count(const char *bizdate);                            /* 최고 환율 건수. */
long cmdb_code_name_like(const char *pat);                               /* 코드명 패턴 검색 건수. */
long cmdb_log_distinct_svc(const char *bizdate);                         /* 고유 서비스 수. */
long cmdb_fx_on_holiday(const char *bizdate);                            /* 휴일자 환율 합(조인). */
long cmdb_fx_min(const char *bizdate);                                   /* 최소 환율. */
long cmdb_fx_high_pct(const char *bizdate);                              /* 고환율 비율(%). */
int cmdb_param_is_yes(const char *key);                                  /* 파라미터 Y 여부. */
long cmdb_seq_bump_active(const char *bizdate);                          /* 활동 서비스 시퀀스 증가. */
long cmdb_counter_add(const char *bizdate, long amount);                 /* 카운터 채번 후 적재. */
long cmdb_netting_gross(const char *bizdate);                            /* 차변+대변 총액. */
long cmdb_fx_positive_count(const char *bizdate);                        /* 환율>0 건수(커서). */
long cmdb_sort_spread(const char *grp);                                   /* 코드그룹 정렬순서 최대-최소 범위. */

#endif /* CM_DBIO_H */
