/**
 * @description
 * 항공 방제 탭의 도메인 인터페이스 모음. 항공 미디어(AERIAL_MEDIA), CCTV
 * 카메라, 위성 촬영 요청(SAT_REQUEST), 드론 스트림, UP42 위성 패스 같은
 * 미디어/장비 API 응답, 그리고 시립대 GPU 추론 기반 유류 감지(OilDetection)
 * 설정·결과 모델까지 담는다.
 *
 * @author dnlee (dnlee@gcsc.co.kr)
 */

/** 항공 방제 — 항공 미디어 API 응답 (드론/비행기/위성 이미지 메타) */
export interface AerialMediaItem {
  aerialMediaSn: number;
  acdntSn: number | null;
  fileNm: string;
  orgnlNm: string | null;
  filePath: string | null;
  lon: number | null;
  lat: number | null;
  locDc: string | null;
  equipTpCd: string;
  equipNm: string;
  mediaTpCd: string;
  takngDtm: string | null;
  fileSz: string | null;
  resolution: string | null;
}

/** 항공 방제 — CCTV 카메라 API 응답 (위치·상태·스트림 URL) */
export interface CctvCameraItem {
  cctvSn: number;
  cameraNm: string;
  regionNm: string;
  lon: number | null;
  lat: number | null;
  locDc: string | null;
  coordDc: string | null;
  sttsCd: string;
  ptzYn: string;
  sourceNm: string | null;
  streamUrl: string | null;
}

/** 항공 방제 — 위성 촬영 요청 API 응답 (요청 정보·상태) */
export interface SatRequestItem {
  satReqSn: number;
  reqCd: string;
  acdntSn: number | null;
  lon: number | null;
  lat: number | null;
  zoneDc: string | null;
  coordDc: string | null;
  zoneAreaKm2: number | null;
  satNm: string | null;
  providerNm: string | null;
  resolution: string | null;
  purposeDc: string | null;
  reqstrNm: string | null;
  reqDtm: string | null;
  expectedRcvDtm: string | null;
  sttsCd: string;
}

/** 항공 방제 — 위성 촬영 요청 생성 페이로드 */
export interface CreateSatRequestInput {
  reqCd: string;
  acdntSn?: number;
  lon?: number;
  lat?: number;
  zoneDc?: string;
  zoneAreaKm2?: number;
  satNm?: string;
  providerNm?: string;
  resolution?: string;
  purposeDc?: string;
  reqstrNm?: string;
  expectedRcvDtm?: string;
}

/** 항공 방제 — 드론 스트림 상태 API 응답 (RTSP→HLS 변환 상태) */
export interface DroneStreamItem {
  id: string;
  name: string;
  shipName: string;
  droneModel: string;
  ip: string;
  rtspUrl: string;
  region: string;
  status: 'idle' | 'starting' | 'streaming' | 'error';
  hlsUrl: string | null;
  error: string | null;
}

/** 항공 방제 — UP42 위성 패스 정보 (경로·해상도·고도각) */
export interface SatellitePass {
  id: string;
  satellite: string;
  provider: string;
  type: 'optical' | 'sar' | 'elevation';
  resolution: string;
  color: string;
  startTime: string;
  endTime: string;
  maxElevation: number;
  direction: 'ascending' | 'descending';
  orbit: Array<{ lat: number; lon: number }>;
}

/** 유류 감지 — 감지 설정 (캡처 주기·커버리지·해상도) */
export interface OilDetectionConfig {
  captureIntervalMs: number;
  coverageAreaM2: number;
  captureWidth: number;
}

/** 유류 감지 — 유류 클래스 정의 (ID·이름·RGB·두께) */
export interface OilClass {
  classId: number;
  className: string;
  color: [number, number, number];
  thicknessMm: number;
}

/** 유류 감지 — 개별 유류 영역 (API 응답에서 변환한 클래스별 결과) */
export interface OilRegion {
  classId: number;
  className: string;
  pixelCount: number;
  percentage: number;
  areaM2: number;
  thicknessMm: number;
}

/** 유류 감지 — GPU 추론 서버 감지 결과 (세그멘테이션 마스크 + 영역) */
export interface OilDetectionResult {
  regions: OilRegion[];
  totalPercentage: number;
  totalAreaM2: number;
  mask: Uint8Array;
  maskWidth: number;
  maskHeight: number;
  timestamp: number;
}
