/**
 * @description
 * 사고 관리 탭의 도메인 인터페이스 모음. 사고 목록·상세·예측 실행·기상·
 * 미디어·주변 기관·항공 이미지 API 응답과 프런트 정규화 모델(IncidentCompat,
 * Incident), 선박 위치(AIS)·영역 조회 파라미터를 정의한다.
 *
 * @author dnlee (dnlee@gcsc.co.kr)
 */

/** 사고 관리 — 사고 목록 API 응답 아이템 */
export interface IncidentListItem {
  acdntSn: number;
  acdntCd: string;
  acdntNm: string;
  acdntTpCd: string;
  acdntSttsCd: string;
  lat: number;
  lng: number;
  locDc: string;
  occrnDtm: string;
  regionNm: string;
  officeNm: string;
  svrtCd: string | null;
  vesselTp: string | null;
  phaseCd: string;
  analystNm: string | null;
  oilTpCd: string | null;
  spilQty: number | null;
  spilUnitCd: string | null;
  fcstHr: number | null;
  hasPredCompleted: boolean;
  hasHnsCompleted: boolean;
  hasRescueCompleted: boolean;
  mediaCnt: number;
  hasImgAnalysis: boolean;
}

/** 사고 관리 — 사고 예측 실행 이력 (알고리즘/상태/시각) */
export interface PredExecItem {
  predExecSn: number;
  algoCd: string;
  execSttsCd: string;
  bgngDtm: string | null;
  cmplDtm: string | null;
  reqdSec: number | null;
}

/** 사고 관리 — 사고 발생 지점 기상 정보 (관측·예보·영향 설명) */
export interface WeatherInfo {
  locNm: string;
  obsDtm: string;
  icon: string;
  temp: string;
  weatherDc: string;
  wind: string;
  wave: string;
  humid: string;
  vis: string;
  sst: string;
  tide: string;
  highTide: string;
  lowTide: string;
  forecast: Array<{ hour: string; icon: string; temp: string }>;
  impactDc: string;
}

/** 사고 관리 — 사고 연관 미디어 메타데이터 (사진·영상·위성·CCTV) */
export interface MediaInfo {
  photoCnt: number;
  videoCnt: number;
  satCnt: number;
  cctvCnt: number;
  photoMeta: Record<string, unknown> | null;
  droneMeta: Record<string, unknown> | null;
  satMeta: Record<string, unknown> | null;
  cctvMeta: Record<string, unknown> | null;
}

/** 사고 관리 — 사고 상세 API 응답 (목록 아이템 + 예측·기상·미디어) */
export interface IncidentDetail extends IncidentListItem {
  predictions: PredExecItem[];
  weather: WeatherInfo | null;
  media: MediaInfo | null;
}

/** 사고 관리 — 프런트 호환 사고 정규화 모델 (camelCase, 상태 union) */
export interface IncidentCompat {
  id: string;
  name: string;
  status: 'active' | 'investigating' | 'closed';
  date: string;
  time: string;
  region: string;
  office: string;
  location: { lat: number; lon: number };
  causeType?: string;
  oilType?: string;
  prediction?: string;
  vesselName?: string;
  mediaCount?: number;
  hasImgAnalysis?: boolean;
}

/** 사고 관리 — 좌측 패널/내부 컴포넌트 공유 사고 모델 (IncidentCompat와 동일 구조) */
export interface Incident {
  id: string;
  name: string;
  status: 'active' | 'investigating' | 'closed';
  date: string;
  time: string;
  region: string;
  office: string;
  location: { lat: number; lon: number };
  causeType?: string;
  oilType?: string;
  prediction?: string;
  vesselName?: string;
  mediaCount?: number;
  hasImgAnalysis?: boolean;
}

/** 사고 관리 — 사고 인근 기관 API 응답 (거리 포함) */
export interface NearbyOrgItem {
  orgSn: number;
  orgTp: string;
  jrsdNm: string;
  areaNm: string;
  orgNm: string;
  addr: string;
  tel: string;
  lat: number;
  lng: number;
  pinSize: string;
  vesselCnt: number;
  skimmerCnt: number;
  pumpCnt: number;
  vehicleCnt: number;
  sprayerCnt: number;
  totalAssets: number;
  distanceNm: number;
}

/** 사고 관리 — AIS 선박 위치 데이터 (외부 AIS API 응답) */
export interface VesselPosition {
  mmsi: string;
  imo?: string;
  shipName: string;
  callSign?: string;
  shipType: number;
  shipTypeText?: string;
  latitude: number;
  longitude: number;
  speed: number;
  course: number;
  heading: number;
  navStatus: number;
  navStatusText?: string;
  timestamp: string;
  destination?: string;
  eta?: string;
  draught?: number;
  length?: number;
  width?: number;
}

/** 사고 관리 — 선박 영역 조회 파라미터 (bounding box) */
export interface BoundingBox {
  minLat: number;
  maxLat: number;
  minLng: number;
  maxLng: number;
}
