/*
 * au_limit_spread_dbio.pgc - au 모듈 DB 접근 함수 세트 (au_limit_spread_dbio), archived into libaudbio.a.
 * ECPG (EXEC SQL) functions; run on the caller's XA branch. No EXEC SQL CONNECT.
 * Shape: 한 번의 SELECT 로 max/min/avg 3중 집계 - 한도 스프레드 + 평균 사용액.
 */
#include <string.h>
#include <userlog.h>
#include "au_limit_spread_dbio.h"

/* 활성 카드 한도의 max-min 스프레드를 반환하고 평균 사용액을 used_avg_out 에 채운다. */
long audb_limit_spread(long *used_avg_out)
{
    EXEC SQL BEGIN DECLARE SECTION;
    long h_max = 0, h_min = 0, h_avg = 0;
    EXEC SQL END DECLARE SECTION;
    EXEC SQL SELECT coalesce(max(daily_limit),0), coalesce(min(daily_limit),0),
                    coalesce(avg(used_amount),0)::bigint
        INTO :h_max, :h_min, :h_avg FROM card_limit WHERE status = 'ACTIVE';
    if (sqlca.sqlcode < 0) return -1;
    *used_avg_out = h_avg;
    return h_max - h_min;
}
