package com.zioinfo.kintex.ticket.smart;

import jakarta.validation.constraints.NotBlank;

/**
 * F-B1 스마트티켓(회전 QR) DTO. 전 경로 공개(/api/public/**) — 티켓은 비로그인 예매.
 * <p>보안(§0-3): deviceId 원문 미보관(sha256 해시만) · secret 미노출. 응답 티켓코드 외 PII 없음.
 */
public final class SmartTicketDtos {

    private SmartTicketDtos() {
    }

    /** 스마트티켓 활성화(디바이스 바인딩) — 예매번호+연락처 본인확인 후 특정 기기에 바인딩. */
    public record ActivateRequest(
            @NotBlank String orderNo,
            @NotBlank String contact,
            @NotBlank String ticketCode,
            @NotBlank String deviceId) {
    }

    /** 활성화 결과. */
    public record ActivateResultDto(String ticketCode, boolean activated, int windowSeconds) {
    }

    /** 회전 토큰 발급 결과 — QR 페이로드 = {@code ticketCode|token}. */
    public record RotatingTokenDto(
            String ticketCode,
            String token,
            String qrPayload,
            int windowSeconds,
            int remainingSeconds) {
    }

    /** 게이트 검증 요청 — 스캐너가 읽은 QR 페이로드(ticketCode|token). */
    public record VerifyRequest(@NotBlank String qrPayload) {
    }

    /** 검증 결과. */
    public record VerifyResultDto(boolean valid, String ticketCode, String reason) {
    }
}
