package com.zioinfo.kintex.analytics.dto;

import java.util.List;

/**
 * 테넌트 전역(행사 횡단) 경영분석 BI (M16 / SCR-13 잔여 갭).
 * 행사 스코프 {@link AnalyticsDto}와 별개로, 행사 간 매출 비교·홀 가동률 추이·참가사 리텐션·
 * 수요예측(단순 추세 기반, AI 호출 없음)을 조립한다. 집계원은 기존 테이블(event·hall·booth·
 * layout·utility_order·master_data) read-only. 원천 부재 지표는 빈배열/0 으로 정직 반환한다.
 * 열람 권한 = 홀매니저(킨텍스 내부, 전 행사 열람).
 */
public record AnalyticsOverviewDto(
        List<Kpi> kpis,
        List<EventRevenue> eventComparison,
        List<OccupancyPoint> hallOccupancy,
        Retention retention,
        Forecast forecast
) {
    /** 요약 KPI(라벨·값·부가). */
    public record Kpi(String label, String value, String hint) {
    }

    /** 행사 간 매출 비교 — 부스가 배치된 행사만(임대=면적×요율, 유틸=견적 합). */
    public record EventRevenue(
            String eventId, String eventName, long revenue,
            long boothCount, long areaM2, String grade) {
    }

    /** 홀 가동률 추이(월별). occupancyPercent = bookedDays / (홀수 × 그달 일수) × 100. */
    public record OccupancyPoint(
            String period, double occupancyPercent, long bookedDays, long capacityDays) {
    }

    /** 참가사 리텐션(재참가) 요약 + 연도별 추이. */
    public record Retention(
            long totalCompanies, long returningCompanies, double retentionPercent,
            List<RetentionYear> byYear) {
    }

    /** 연도별 리텐션 — 해당 연도 참가사 중 이전 연도에도 참가한 비율. */
    public record RetentionYear(
            String period, long companies, long returningCompanies, double retentionPercent) {
    }

    /** 수요예측(단순 추세) — 연도별 개최 행사 수 실측 + 최소자승 추세 투영. */
    public record Forecast(
            String metric, String method,
            List<ForecastPoint> history, List<ForecastPoint> projection) {
    }

    /** 예측 포인트 — projected=true 이면 추세 투영값. */
    public record ForecastPoint(String period, double value, boolean projected) {
    }
}
