package com.zioinfo.kintex.visitor.paymethod;

import jakarta.validation.constraints.NotBlank;

/**
 * F-B5 저장 결제수단 DTO. 인증(본인 소유분만).
 * <p>보안(§0-3): 카드 원문(PAN·CVC·유효기간)은 요청에서만 잠시 쓰고 저장하지 않는다 — 응답은 마스킹만.
 */
public final class PayMethodDtos {

    private PayMethodDtos() {
    }

    /**
     * 결제수단 등록 요청 — cardNumber 는 last4 산출·mock 토큰화에만 사용(저장 금지).
     */
    public record RegisterRequest(
            @NotBlank String kind,        // card/easy/bank
            String brand,                 // 신한/현대/카카오페이 등
            String cardNumber,            // 원문(저장 안 함)
            String label,
            boolean makeDefault) {
    }

    /** 저장 결제수단(응답) — 마스킹 표시값 + mock 토큰 식별자(원문 아님). */
    public record PayMethodDto(
            String id,
            String kind,
            String brand,
            String last4,
            boolean isDefault,
            String label,
            String createdAt) {
    }

    /** 간편결제(빠른결제) 요청 — 저장 수단으로 금액 승인(mock PG). */
    public record QuickPayRequest(
            @NotBlank String methodId,
            long amount,
            String memo) {
    }

    /** 간편결제 결과 — mock 승인번호. */
    public record QuickPayResultDto(
            boolean approved,
            String approvalNo,
            long amount,
            String brand,
            String last4,
            String message) {
    }
}
