package com.zioinfo.kintex.parking.dto;

import jakarta.validation.constraints.NotBlank;

import java.util.List;

/**
 * 관람객 주차 연계(F-C2) DTO 모음. 주차 현황(공개) · 사전 주차권 구매/조회(인증).
 * <p>보안(§0-3): 차량번호 원문 미노출 — 응답은 마스킹 필드만. 소유자 식별은 내부 user_id.
 */
public final class ParkingDtos {

    private ParkingDtos() {
    }

    /**
     * 주차장 실시간 현황(공개) — 잔여·점유율·혼잡도·요금. 점유는 시뮬레이션 어댑터 산출값.
     * congestionLevel ∈ FREE|NORMAL|BUSY (여유/보통/혼잡).
     */
    public record ParkingLotStatusDto(
            String lotId,
            String code,
            String name,
            Integer exhibitionCenter,
            int totalCapacity,
            int occupied,
            int available,
            int occupancyPercent,
            String congestionLevel,
            String congestionLabel,
            long hourlyRate,
            Long dailyMax,
            long passPrice,
            String note,
            String updatedAt) {
    }

    /** 사전 주차권 구매 요청 — 1일권. 차량번호는 마스킹 저장(원문 미보관). */
    public record PurchasePassRequest(
            @NotBlank String lotId,
            @NotBlank String useDate,       // YYYY-MM-DD
            String eventId,
            String vehiclePlate,            // 원문(마스킹 후 폐기, 미저장)
            String payMethod) {
    }

    /** 발급된 주차권 — 소유자(내부 user_id) 본인만 조회. 차량번호 마스킹만 노출. */
    public record ParkingPassDto(
            String passNo,
            String status,
            String lotId,
            String lotName,
            String eventId,
            String useDate,
            String vehiclePlateMasked,
            long amount,
            String payMethod,
            String payApprovalNo,
            String issuedAt) {
    }

    /** 내 주차권 목록 봉투(향후 확장 여지). */
    public record MyPassesDto(List<ParkingPassDto> passes) {
    }
}
