/*
 * acq_iso8583.h - 실제 ISO 8583 전문 코덱 (비트맵 + 데이터엘리먼트).
 *   와이어 포맷: MTI(4) + 1차 비트맵(16 hex) + DE 필드(가변).
 *   외부 카드망(밴사/VAN) 인터페이스의 실제 전문 조립·파싱.
 *   Pro*C/Tuxedo 레거시에서 소켓 위로 주고받던 그 계층 — 마이그레이션 난제.
 */
#ifndef ACQ_ISO8583_H
#define ACQ_ISO8583_H

#define ISO_MAX_DE   64
#define ISO_MAXLEN   2048

/* 지원 DE (부분집합, 실무 핵심 필드) */
typedef struct {
    char mti[5];                       /* 0200/0210/0420/0800/0810 ... */
    char de[ISO_MAX_DE + 1][128];      /* de[2]=PAN, de[3]=처리코드, de[4]=금액 ... */
    unsigned char present[ISO_MAX_DE + 1]; /* 필드 존재 플래그 */
} iso_msg_t;

/* 초기화 */
void iso_init(iso_msg_t *m);
/* DE 설정(문자열) */
void iso_set(iso_msg_t *m, int de, const char *val);
/* DE 조회(없으면 "") */
const char *iso_get(const iso_msg_t *m, int de);
/* 조립: iso_msg_t -> 와이어 hex 문자열(out). 반환=길이, 실패 -1 */
int iso_build(const iso_msg_t *m, char *out, int outcap);
/* 파싱: 와이어 hex 문자열 -> iso_msg_t. 반환=파싱 DE 수, 실패 -1 */
int iso_parse(const char *wire, iso_msg_t *m);

#endif /* ACQ_ISO8583_H */
