/**
 * @description
 * 구조 시나리오 탭의 도메인 인터페이스 모음. 긴급구난 작전(RESCUE_OPS)과
 * 시간 단계별 시나리오(RESCUE_SCENARIO)의 API 응답 구조, 그리고 프런트에서
 * 변환해 사용하는 시나리오 로컬 모델과 차트 시각화용 파생 데이터를 정의한다.
 *
 * @author dnlee (dnlee@gcsc.co.kr)
 */
import type { Severity } from '@/types/rescue/RescueType';

/** 구조 시나리오 — 긴급구난 작전 기본 정보 (RESCUE_OPS 테이블 응답) */
export interface RescueOpsItem {
  rescueOpsSn: number;
  acdntSn: number | null;
  opsCd: string;
  acdntTpCd: string;
  vesselNm: string;
  commanderNm: string | null;
  lon: number | null;
  lat: number | null;
  locDc: string | null;
  depthM: number | null;
  currentDc: string | null;
  gmM: number | null;
  listDeg: number | null;
  trimM: number | null;
  buoyancyPct: number | null;
  oilRateLpm: number | null;
  bmRatioPct: number | null;
  totalCrew: number | null;
  survivors: number | null;
  missing: number | null;
  hydroData: Record<string, unknown> | null;
  gmdssData: Record<string, unknown> | null;
  sttsCd: string;
  regDtm: string;
}

/** 구조 시나리오 — 시간 단계별 시나리오 API 응답 (RESCUE_SCENARIO 테이블) */
export interface RescueScenarioItem {
  scenarioSn: number;
  rescueOpsSn: number;
  timeStep: string;
  scenarioDtm: string | null;
  svrtCd: string; // CRITICAL/HIGH/MEDIUM/RESOLVED
  gmM: number | null;
  listDeg: number | null;
  trimM: number | null;
  buoyancyPct: number | null;
  oilRateLpm: number | null;
  bmRatioPct: number | null;
  description: string | null;
  compartments: Array<{ name: string; status: string; color: string }> | null;
  assessment: Array<{ label: string; value: string; color: string }> | null;
  actions: Array<{ time: string; text: string; color: string }> | null;
  sortOrd: number;
}

/** 구조 시나리오 — API 응답을 UI 표시용으로 변환한 시나리오 모델 */
export interface RescueScenario {
  id: string;
  name: string;
  severity: Severity;
  timeStep: string;
  datetime: string;
  gm: string;
  list: string;
  trim: string;
  buoyancy: number;
  oilRate: string;
  bmRatio: string;
  description: string;
  compartments: { name: string; status: string; color: string }[];
  assessment: { label: string; value: string; color: string }[];
  actions: { time: string; text: string; color: string }[];
}

/** 구조 시나리오 — 차트 시각화용 메트릭 파생 데이터 (GM/List/Buoy/Oil/BM) */
export interface ChartDataItem {
  id: string;
  label: string;
  gm: number;
  list: number;
  buoy: number;
  oil: number;
  bm: number;
  severity: Severity;
}
