package com.zioinfo.kintex.ticket.cancel;

import jakarta.validation.constraints.NotBlank;

import java.util.List;

/**
 * F-B2 티켓 취소·환불 DTO. 전 경로 공개(/api/public/**) — 티켓은 비로그인.
 * <p>보안(§0-3): 구매자 PII 원문 미노출. 금액은 전부 서버 산출값.
 */
public final class TicketCancelDtos {

    private TicketCancelDtos() {
    }

    /** 예상 환불 조회/취소 요청 — 예매번호 + 연락처(본인확인). */
    public record CancelRequest(
            @NotBlank String orderNo,
            @NotBlank String contact) {
    }

    /** 규정 구간(표시용). */
    public record BracketDto(int minDaysBefore, double refundRatePercent, String label) {
    }

    /**
     * 예상 환불 산정 결과(서버 권위). preview=true 는 미확정(조회만), false 는 실제 취소 반영.
     */
    public record RefundQuoteDto(
            String orderNo,
            String status,          // PAID/CANCELLED
            String productName,
            int qty,
            long ticketAmount,      // 환불 대상 티켓액
            long bookingFee,        // 예매수수료 총액
            int daysBefore,
            double refundRatePercent,
            String bracketLabel,
            long ticketRefund,
            long adminFee,
            long bookingFeeRefund,
            long refundAmount,      // 최종 환불 예상액
            long forfeitAmount,     // 공제(위약)액
            String policyVersion,
            boolean cancellable,    // 취소 가능 여부(PAID·미취소)
            List<BracketDto> brackets) {
    }
}
