package com.zioinfo.kintex.ops.dto;

import java.util.List;

/**
 * 홀 현장 운영 현황 (SCR-14 / 06_backend_api_gaps §5).
 *
 * <p>실집계원(하드웨어 무관):
 * <ul>
 *   <li>혼잡(halls.estPeople/heat) — M10 체크인 실집계(visitor_registration.checkin_at) 파생.
 *       현장 인원은 홀 판매면적(ST_Area) 비중으로 분배한 추정치이며 사람 계측 센서가 아니다.</li>
 *   <li>전력(halls.powerKw / powerTotalKw) — M4 유틸리티 신청 부하(utility_order.quote.requestedKw) 집계.</li>
 *   <li>checkinSeries — 시간대(0~23시)별 체크인 집계(혼잡 추이).</li>
 * </ul>
 * HVAC/조명/주차는 센서·IoT 미연동(PLANNING M14) → null/빈배열(정직). 하드웨어 연동 코드 없음.
 */
public record OpsDto(
        List<Hall> halls,
        Hvac hvac,
        List<LightingZone> lighting,
        List<ParkingZone> parking,
        long onSiteCount,
        Double powerTotalKw,
        List<CheckinPoint> checkinSeries
) {
    /** 홀 혼잡/전력 — estPeople·heat(체크인 파생), powerKw(유틸리티 신청 부하, 신청 없으면 null). */
    public record Hall(String hallId, String label, long estPeople, String heat, Double powerKw) {
    }

    /** 공조 계측(센서 부재 시 null). */
    public record Hvac(Double tempC, Integer humidityPercent, Integer co2Ppm) {
    }

    /** 조명 존 점등률(IoT 부재 시 빈배열). */
    public record LightingZone(String zone, int onPercent) {
    }

    /** 주차 존 점유·수용(연계 부재 시 빈배열). */
    public record ParkingZone(String zone, int occupancy, int capacity) {
    }

    /** 시간대별 체크인 수(hour = 'HH:00'). */
    public record CheckinPoint(String hour, long count) {
    }
}
