package com.zioinfo.kintex.parking;

import com.zioinfo.kintex.parking.dto.ParkingDtos.ParkingLotStatusDto;
import com.zioinfo.kintex.parking.dto.ParkingDtos.ParkingPassDto;
import com.zioinfo.kintex.parking.dto.ParkingDtos.PurchasePassRequest;

import java.util.List;

/**
 * 관람객 주차 연계(F-C2) 서비스 계약.
 *
 * <p>어댑터 패턴: 실시간 주차 현황(잔여·점유)의 원천은 외부 시스템(iparking 등)이나 현재 미연동이다.
 * 기본 구현({@link SimulatedParkingService})은 결정론적 시뮬레이션으로 현황을 산출하며,
 * 운영 전환 시 외부 실연동 어댑터를 이 인터페이스의 대체 {@code @Service} 로 주입한다(코드 변경 최소).
 */
public interface ParkingService {

    /** 주차장별 실시간 현황(공개) — 잔여·점유율·혼잡도·요금. eventId 는 선택(사전권 가중 기준일 산정용). */
    List<ParkingLotStatusDto> getLotStatus(String eventId);

    /** 사전 주차권 구매(인증 관람객) — mock 결제 승인 후 발급. userId 는 JWT 주체. */
    ParkingPassDto purchasePass(String userId, PurchasePassRequest req);

    /** 내 주차권 목록(인증 관람객) — 본인 소유분만. */
    List<ParkingPassDto> myPasses(String userId);
}
