package kr.or.bok.rtgs.common

/**
 * 입구(rtgs.inbound) 봉투 — Chanel(접수센터) -> Sequencer.
 * originCenter는 최초 접수 센터로, 저널을 통해 전 센터에 공유되어 결과통보 책임 센터를 정한다.
 */
data class InboundRequest(
    val core: CoreMessage,
    val originCenter: String,
)

/**
 * 결과(rtgs.result) 봉투 — Hermes -> Prada.
 * 결제처리 결과와 최종 상태(ACSP/RJCT)를 담아 결과동기화로 전달.
 */
data class ResultMessage(
    val journalEntry: JournalEntry,
    val status: TxSts,
    val processedCenter: String,
    val debtorBalanceAfter: Long? = null,
    val creditorBalanceAfter: Long? = null,
    val reason: String? = null,
)

/**
 * 결과통보(rtgs.notify) 봉투 — Prada(완결) -> Chanel.
 * 거래가 최종 상태(ACCC/RJCT)로 확정된 뒤, 접수센터(originCenter)의 Chanel이 신청기관(송신)·
 * 수취기관 앞 결과 전문(pacs.002)을 생성·송부하도록 트리거한다.
 */
data class SettlementNotice(
    val bmi: String,
    val originCenter: String,     // 접수센터 = 결과통보 책임 센터
    val senderCode: String,       // 신청(송신)기관
    val receiverCode: String,     // 수취기관
    val amount: Long,
    val globalSeq: Long,
    val finalStatus: TxSts,       // ACCC or RJCT
    val reason: String? = null,
    val finalizedAt: Long,
)
