/**
 * @description
 * Pre-SCAT 해안 조사 탭의 도메인 인터페이스 모음. 백엔드 API 응답 원본
 * (ApiZone/ApiSection*)과 프런트 정규화 모델(ScatSegment/ScatDetail),
 * 조사 구간 조회 필터(SectionFilters)를 정의한다.
 *
 * @author dnlee (dnlee@gcsc.co.kr)
 */

/** Pre-SCAT — 백엔드 조사 구역(Zone) 목록 API 응답 */
export interface ApiZoneItem {
  cstSrvyZoneSn: number;
  zoneCd: string;
  zoneNm: string;
  jrsdNm: string;
  sectCnt: number;
  latCenter: number;
  lngCenter: number;
  latRange: number;
  lngRange: number;
}

/** Pre-SCAT — 백엔드 해안 구간(Section) 목록 API 응답 */
export interface ApiSectionListItem {
  cstSectSn: number;
  sectCd: string;
  sectNm: string;
  cstTpCd: string;
  esiCd: string;
  esiNum: number;
  lenM: number;
  snstvtCd: string;
  srvySttsCd: string;
  lat: number;
  lng: number;
  tags: string[];
  zoneCd: string;
  zoneNm: string;
  jrsdNm: string;
}

/** Pre-SCAT — 백엔드 해안 구간 상세 API 응답 (리스트 구조 상속) */
export interface ApiSectionDetail extends ApiSectionListItem {
  geomJson: Record<string, unknown> | null;
  shoreTp: string | null;
  accessDc: string | null;
  accessPt: string | null;
  sensitiveInfo: { t: string; v: string }[];
  cleanupMethods: string[];
  endCriteria: string[];
  notes: string[];
}

/** Pre-SCAT — 구간 조회 요청 필터 (구역/상태/민감도/검색 등) */
export interface SectionFilters {
  zone?: string;
  status?: string;
  sensitivity?: string;
  jurisdiction?: string;
  search?: string;
  officeCd?: string;
}

/** Pre-SCAT — 프런트 리스트용 정규화 세그먼트 모델 (ApiSectionListItem 변환) */
export interface ScatSegment {
  id: number;
  code: string;
  area: string;
  name: string;
  type: string;
  esi: string;
  esiNum: number;
  length: string;
  lengthM: number;
  sensitivity: '최상' | '상' | '중' | '하';
  status: '완료' | '진행중' | '미조사';
  lat: number;
  lng: number;
  tags: string[];
  jurisdiction: string;
}

/** Pre-SCAT — 프런트 상세용 정규화 모델 (ApiSectionDetail 변환) */
export interface ScatDetail {
  code: string;
  name: string;
  esi: string;
  esiColor: string;
  lat: number;
  lng: number;
  type: string;
  substrate: string;
  length: string;
  sensitivity: string;
  status: string;
  access: string;
  accessPt: string;
  sensitive: { t: string; v: string }[];
  cleanup: string[];
  endCriteria: string[];
  notes: string[];
}
