/*
 * 시스템관리 — 공휴일 관리 API 계약. 공용 클라이언트(../../api/client)만 사용.
 * 정본: 백엔드 com.zioinfo.kintex.system.holiday.HolidayController (V41 holiday, PK tenant_id+ymd).
 *   관리 GET  /api/admin/holidays?year=&from=&to=  (ADMIN, 휴무 off 포함)
 *        GET  /api/admin/holidays/years            (ADMIN, 연도 목록)
 *        POST /api/admin/holidays                  (ADMIN, 임시공휴일 추가 · PK 충돌 409)
 *        DELETE /api/admin/holidays/{ymd}          (ADMIN)
 *        PATCH  /api/admin/holidays/{ymd}          (ADMIN, is_holiday 토글)
 *   공개 GET  /api/holidays?from=&to=              (인증, 실제 휴무만 — 캘린더 붉은색)
 * 데이터·시드(2024~2050)는 V41 소유 — 본 API는 조회·임시공휴일 관리만.
 */
import { api } from '../../api/client';

export interface Holiday {
  ymd: string; // yyyy-MM-dd
  name: string;
  isSubstitute: boolean;
  isHoliday: boolean;
}
export interface HolidayCreateBody {
  ymd: string;
  name: string;
  isSubstitute?: boolean;
}

export const holidayApi = {
  /** 관리자 — 연도별(또는 from/to) 목록. */
  adminList: (year: number) => api.get<Holiday[]>(`/api/admin/holidays?year=${year}`),
  /** 관리자 — 데이터 존재 연도 목록(내림차순). */
  years: () => api.get<number[]>('/api/admin/holidays/years'),
  /** 관리자 — 임시공휴일 추가. */
  create: (body: HolidayCreateBody) => api.post<Holiday>('/api/admin/holidays', body),
  /** 관리자 — 삭제. */
  remove: (ymd: string) => api.del<void>(`/api/admin/holidays/${encodeURIComponent(ymd)}`),
  /** 관리자 — 휴무 여부 토글(임시휴무 on/off). */
  toggle: (ymd: string, isHoliday: boolean) =>
    api.patch<void>(`/api/admin/holidays/${encodeURIComponent(ymd)}`, { isHoliday }),
};

/** 캘린더 붉은색 표시용 — 기간 내 실제 휴무만(인증). ymd → 공휴일명 Map 으로 변환해 반환. */
export async function fetchHolidaySet(from: string, to: string): Promise<Map<string, string>> {
  const list = await api.get<Holiday[]>(
    `/api/holidays?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}`,
  );
  const m = new Map<string, string>();
  for (const h of list ?? []) m.set(h.ymd, h.name);
  return m;
}
