/*
 * SCR-HOME 메인 홈 로컬 API 클라이언트 — 백엔드 com.zioinfo.kintex.home 4개 집계 엔드포인트.
 * 공용 client(../../api/client)의 `api` 만 import — client.ts·endpoints.ts·types.ts 무수정.
 * 정본: _workspace/impl_home_api.md (응답 shape 그대로 소비).
 *
 * 각 엔드포인트는 프론트에서 독립 호출한다(영역별 스켈레톤/에러 — 한 영역 실패가 홈 전체를 막지 않음).
 * 인증 필수(전 엔드포인트 anyRequest().authenticated()). PII·자격정보 미포함(서버 보장).
 */
import { api } from '../../api/client';

// ── 1) GET /api/home/todos — 내 할 일(역할 기반·크로스도메인 자동 집계) ──
export type TodoType =
  | 'approval'
  | 'document'
  | 'milestone'
  | 'auction'
  | 'settlement'
  | 'checkin'
  | 'lead'
  | 'system';
export type TodoSeverity = 'normal' | 'warning' | 'overdue';

export interface HomeTodoItem {
  type: TodoType;
  title: string;
  target: string;
  dueDate: string | null; // "YYYY-MM-DD" | null
  dday: number | null; // 잔여 일수(음수=경과, null=기한없음)
  severity: TodoSeverity;
  route: string; // 프론트 딥링크
}
export interface HomeTodos {
  total: number; // 병합된 실제 미결 건수
  items: HomeTodoItem[]; // 상위 6건
}

// ── 2) GET /api/home/showcase?tab=ongoing|thisMonth|nextMonth ──
export type ShowcaseTab = 'ongoing' | 'thisMonth' | 'nextMonth';
export type ShowcaseStatus = 'ongoing' | 'upcoming' | 'ended';

export interface ShowcaseItem {
  id: string;
  name: string;
  startDate: string; // "YYYY-MM-DD"
  endDate: string;
  hallLabel: string | null;
  posterUrl: string | null; // null 이면 프론트 그라디언트+행사명 폴백
  status: ShowcaseStatus;
  dday: number; // 개장까지 잔여(진행 중 = 0 이하)
}

// ── 3) GET /api/home/hall-centers — 전시장(센터) 동적 목록 ──
export interface HallCenter {
  code: string; // exhibition_center 정수 문자열
  label: string; // "제{code}전시장"
}

// ── 4) GET /api/home/summary — 역할별 KPI 4타일 ──
export type KpiSeverity = 'normal' | 'warning' | 'overdue';
export interface KpiTile {
  key: string;
  label: string;
  value: number | string | null; // 집계 수치 또는 "D-n" 문자열, 미연동은 null → "—"
  unit: string | null;
  dday: number | null;
  severity: KpiSeverity;
  route: string;
}
export interface HomeSummary {
  role: string; // ORGANIZER | EXHIBITOR | CONTRACTOR | ADMIN
  tiles: KpiTile[];
}

export const homeApi = {
  todos: () => api.get<HomeTodos>('/api/home/todos'),
  showcase: (tab: ShowcaseTab = 'ongoing') =>
    api.get<ShowcaseItem[]>(`/api/home/showcase?tab=${encodeURIComponent(tab)}`),
  hallCenters: () => api.get<HallCenter[]>('/api/home/hall-centers'),
  summary: () => api.get<HomeSummary>('/api/home/summary'),
};
