import type { ReportType } from './OilSpillReportTemplate';

// ─── Template definitions ────────────────────────────────
export interface TemplateType {
  id: ReportType;
  icon: string;
  label: string;
  desc: string;
  sections: {
    title: string;
    fields: {
      key: string;
      label: string;
      type: 'text' | 'textarea' | 'date' | 'checkbox-group';
      options?: string[];
    }[];
  }[];
}

export const templateTypes: TemplateType[] = [
  {
    id: '초기보고서',
    icon: '📋',
    label: '초기보고서',
    desc: '사고 발생 직후 초기 상황 보고',
    sections: [
      {
        title: '1. 기본정보',
        fields: [
          { key: 'incident.writeTime', label: '보고일시', type: 'text' },
          { key: 'author', label: '작성자', type: 'text' },
          {
            key: 'targets',
            label: '보고대상',
            type: 'checkbox-group',
            options: ['본청', '지방청', '유관기서'],
          },
        ],
      },
      {
        title: '2. 사고개요',
        fields: [
          { key: 'incident.name', label: '사고명', type: 'text' },
          { key: 'incident.occurTime', label: '발생일시', type: 'text' },
          { key: 'incident.location', label: '발생위치', type: 'text' },
          { key: 'incident.shipName', label: '사고선박', type: 'text' },
          { key: 'incident.accidentType', label: '사고유형', type: 'text' },
        ],
      },
      {
        title: '3. 유출현황',
        fields: [
          { key: 'incident.pollutant', label: '유출유종', type: 'text' },
          { key: 'incident.spillAmount', label: '유출량', type: 'text' },
          { key: 'spillPattern', label: '유출형태', type: 'text' },
          { key: 'spreadStatus', label: '확산현황', type: 'text' },
        ],
      },
      {
        title: '4. 초동조치 사항',
        fields: [{ key: 'initialResponse', label: '', type: 'textarea' }],
      },
      { title: '5. 향후 대응계획', fields: [{ key: 'futurePlan', label: '', type: 'textarea' }] },
    ],
  },
  {
    id: '지휘부 보고',
    icon: '📊',
    label: '지휘부 보고',
    desc: '지휘부 보고용 요약 문서',
    sections: [
      {
        title: '1. 기본정보',
        fields: [
          { key: 'incident.writeTime', label: '보고일시', type: 'text' },
          { key: 'author', label: '작성자', type: 'text' },
        ],
      },
      {
        title: '2. 사고 요약',
        fields: [
          { key: 'incident.name', label: '사고명', type: 'text' },
          { key: 'incident.occurTime', label: '발생일시', type: 'text' },
          { key: 'incident.location', label: '발생위치', type: 'text' },
          { key: 'incident.pollutant', label: '유출유종', type: 'text' },
          { key: 'incident.spillAmount', label: '유출량', type: 'text' },
        ],
      },
      { title: '3. 대응현황', fields: [{ key: 'responseStatus', label: '', type: 'textarea' }] },
      { title: '4. 건의사항', fields: [{ key: 'suggestions', label: '', type: 'textarea' }] },
    ],
  },
  {
    id: '예측보고서',
    icon: '📈',
    label: '예측보고서',
    desc: '확산예측 결과 및 민감자원 분석',
    sections: [
      {
        title: '1. 기본정보',
        fields: [
          { key: 'incident.writeTime', label: '보고일시', type: 'text' },
          { key: 'author', label: '작성자', type: 'text' },
        ],
      },
      {
        title: '2. 사고개요',
        fields: [
          { key: 'incident.name', label: '사고명', type: 'text' },
          { key: 'incident.occurTime', label: '발생일시', type: 'text' },
          { key: 'incident.location', label: '발생위치', type: 'text' },
          { key: 'incident.pollutant', label: '유출유종', type: 'text' },
          { key: 'incident.spillAmount', label: '유출량', type: 'text' },
        ],
      },
      { title: '3. 조석 현황', fields: [{ key: '__tide', label: '', type: 'textarea' }] },
      { title: '4. 해양기상 현황', fields: [{ key: '__weather', label: '', type: 'textarea' }] },
      {
        title: '5. 확산예측 결과',
        fields: [
          { key: '__spreadMaps', label: '', type: 'textarea' },
          { key: '__spread', label: '', type: 'textarea' },
        ],
      },
      { title: '6. 민감자원 현황', fields: [{ key: '__sensitive', label: '', type: 'textarea' }] },
      { title: '7. 방제 자원', fields: [{ key: '__vessels', label: '', type: 'textarea' }] },
      { title: '8. 회수·처리 현황', fields: [{ key: '__recovery', label: '', type: 'textarea' }] },
      { title: '9. 최종 결과', fields: [{ key: '__result', label: '', type: 'textarea' }] },
      { title: '10. 분석 의견', fields: [{ key: 'analysis', label: '', type: 'textarea' }] },
    ],
  },
  {
    id: '종합보고서',
    icon: '📑',
    label: '종합보고서',
    desc: '전체 사고 대응 종합 보고 문서',
    sections: [
      {
        title: '1. 기본정보',
        fields: [
          { key: 'incident.writeTime', label: '보고일시', type: 'text' },
          { key: 'author', label: '작성자', type: 'text' },
        ],
      },
      {
        title: '2. 사고개요',
        fields: [
          { key: 'incident.name', label: '사고명', type: 'text' },
          { key: 'incident.occurTime', label: '발생일시', type: 'text' },
          { key: 'incident.location', label: '발생위치', type: 'text' },
          { key: 'incident.shipName', label: '사고선박', type: 'text' },
          { key: 'incident.accidentType', label: '사고유형', type: 'text' },
        ],
      },
      {
        title: '3. 유출 및 확산현황',
        fields: [
          { key: 'incident.pollutant', label: '유출유종', type: 'text' },
          { key: 'incident.spillAmount', label: '유출량', type: 'text' },
          { key: 'spreadSummary', label: '확산현황', type: 'textarea' },
        ],
      },
      { title: '4. 대응현황', fields: [{ key: 'responseDetail', label: '', type: 'textarea' }] },
      { title: '5. 피해현황', fields: [{ key: 'damageReport', label: '', type: 'textarea' }] },
      { title: '6. 향후계획', fields: [{ key: 'futurePlanDetail', label: '', type: 'textarea' }] },
    ],
  },
  {
    id: '유출유 보고',
    icon: '🛢️',
    label: '유출유 보고',
    desc: '유류오염사고 대응지원 상황도',
    sections: [
      // Page 1: 사고 정보
      {
        title: '1. 사고 정보',
        fields: [
          { key: 'incident.name', label: '사고명', type: 'text' },
          { key: 'incident.writeTime', label: '작성시간', type: 'text' },
          { key: 'incident.shipName', label: '선명(시설명)', type: 'text' },
          { key: 'agent', label: '제원', type: 'text' },
          { key: 'incident.location', label: '사고위치', type: 'text' },
          { key: 'incident.lat', label: '좌표(위도)', type: 'text' },
          { key: 'incident.lon', label: '좌표(경도)', type: 'text' },
          { key: 'incident.occurTime', label: '발생시각', type: 'text' },
          { key: 'incident.accidentType', label: '사고유형', type: 'text' },
          { key: 'incident.pollutant', label: '오염물질', type: 'text' },
          { key: 'incident.spillAmount', label: '유출 추정량(㎘)', type: 'text' },
          { key: 'incident.depth', label: '수심', type: 'text' },
          { key: 'incident.seabed', label: '저질', type: 'text' },
        ],
      },
      // Page 2: 해양기상정보
      {
        title: '2. 해양기상정보 - 조석정보',
        fields: [
          { key: 'tideDate', label: '일자', type: 'text' },
          { key: 'tideName', label: '물때', type: 'text' },
          { key: 'lowTide1', label: '저조(1차)', type: 'text' },
          { key: 'highTide1', label: '고조(1차)', type: 'text' },
          { key: 'lowTide2', label: '저조(2차)', type: 'text' },
          { key: 'highTide2', label: '고조(2차)', type: 'text' },
        ],
      },
      {
        title: '2. 해양기상정보 - 기상예보',
        fields: [
          { key: 'weatherTime', label: '기상 예측시간', type: 'text' },
          { key: 'sunrise', label: '일출', type: 'text' },
          { key: 'sunset', label: '일몰', type: 'text' },
          { key: 'windDir', label: '풍향', type: 'text' },
          { key: 'windSpeed', label: '풍속(m/s)', type: 'text' },
          { key: 'currentDir', label: '유향', type: 'text' },
          { key: 'currentSpeed', label: '유속(knot)', type: 'text' },
          { key: 'waveHeight', label: '파고(m)', type: 'text' },
        ],
      },
      // Page 3: 유출유 확산예측
      {
        title: '3. 유출유 확산예측 - 시간별 상세정보',
        fields: [
          { key: 'spread3h_weathered', label: '3시간 풍화량(kL)', type: 'text' },
          { key: 'spread3h_seaRemain', label: '3시간 해상잔존량(kL)', type: 'text' },
          { key: 'spread3h_coastAttach', label: '3시간 연안부착량(kL)', type: 'text' },
          { key: 'spread3h_area', label: '3시간 오염해역면적(km²)', type: 'text' },
          { key: 'spread6h_weathered', label: '6시간 풍화량(kL)', type: 'text' },
          { key: 'spread6h_seaRemain', label: '6시간 해상잔존량(kL)', type: 'text' },
          { key: 'spread6h_coastAttach', label: '6시간 연안부착량(kL)', type: 'text' },
          { key: 'spread6h_area', label: '6시간 오염해역면적(km²)', type: 'text' },
        ],
      },
      { title: '3. 분석', fields: [{ key: 'spreadAnalysis', label: '', type: 'textarea' }] },
      // Page 4-5: 민감자원
      {
        title: '4. 민감자원 - 양식장 분포(10km 내)',
        fields: [{ key: 'aquaculture', label: '', type: 'textarea' }],
      },
      {
        title: '4. 민감자원 - 해수욕장/수산시장/해수취수시설',
        fields: [{ key: 'beaches', label: '', type: 'textarea' }],
      },
      // Page 5: 해안선/생물종
      {
        title: '4. 해안선(ESI) 분포',
        fields: [
          { key: 'esi1_vertical', label: 'ESI 1 수직암반(km)', type: 'text' },
          { key: 'esi2_horizontal', label: 'ESI 2 수평암반(km)', type: 'text' },
          { key: 'esi3_finesand', label: 'ESI 3 세립질 모래(km)', type: 'text' },
          { key: 'esi4_coarsesand', label: 'ESI 4 조립질 모래(km)', type: 'text' },
          { key: 'esi5_sandgravel', label: 'ESI 5 모래·자갈(km)', type: 'text' },
          { key: 'esi6a_gravel', label: 'ESI 6A 자갈(km)', type: 'text' },
          { key: 'esi6b_riprap', label: 'ESI 6B 투과성 사석(km)', type: 'text' },
          { key: 'esi7_semiclosed', label: 'ESI 7 반폐쇄성 해안(km)', type: 'text' },
          { key: 'esi8a_mudflat', label: 'ESI 8A 갯벌(km)', type: 'text' },
          { key: 'esi8b_saltmarsh', label: 'ESI 8B 염습지(km)', type: 'text' },
        ],
      },
      {
        title: '4. 생물종(보호종) / 서식지 분포',
        fields: [{ key: 'bioSpecies', label: '', type: 'textarea' }],
      },
      // Page 6: 통합민감도
      {
        title: '4. 통합민감도 평가',
        fields: [
          { key: 'sens_veryHigh', label: '매우 높음(km²)', type: 'text' },
          { key: 'sens_high', label: '높음(km²)', type: 'text' },
          { key: 'sens_medium', label: '보통(km²)', type: 'text' },
          { key: 'sens_low', label: '낮음(km²)', type: 'text' },
        ],
      },
      // Page 7: 방제전략
      {
        title: '5. 방제전략 - 방제자원 배치 현황(반경 30km)',
        fields: [{ key: 'defenseShips', label: '', type: 'textarea' }],
      },
      { title: '5. 기타 장비', fields: [{ key: 'otherEquipment', label: '', type: 'textarea' }] },
      // Page 8: 동원결과
      {
        title: '6. 방제선/자원 동원 결과',
        fields: [{ key: 'oilRecovery', label: '', type: 'textarea' }],
      },
      {
        title: '6. 동원 방제선 내역',
        fields: [
          { key: 'totalSpill', label: '유출량(kL)', type: 'text' },
          { key: 'totalWeathered', label: '누적풍화량(kL)', type: 'text' },
          { key: 'totalRecovered', label: '누적회수량(kL)', type: 'text' },
          { key: 'totalSeaRemain', label: '누적해상잔존량(kL)', type: 'text' },
          { key: 'totalCoastAttach', label: '누적연안부착량(kL)', type: 'text' },
        ],
      },
    ],
  },
];

// ─── 분석 필드 구분자 (다중 필드 → analysis 단일 컬럼 저장) ──────────
export const ANALYSIS_SEP = '\n\n<<<SEP>>>\n\n';

export const ANALYSIS_FIELD_ORDER: Partial<Record<ReportType, string[]>> = {
  초기보고서: ['initialResponse', 'futurePlan'],
  '지휘부 보고': ['responseStatus', 'suggestions'],
  종합보고서: ['spreadSummary', 'responseDetail', 'damageReport', 'futurePlanDetail'],
};

// ─── Report Generator types & data ────────────────────────
export interface ReportSection {
  id: string;
  icon: string;
  title: string;
  desc: string;
  checked: boolean;
}

export type ReportCategory = 0 | 1 | 2;

export interface CategoryDef {
  icon: string;
  label: string;
  desc: string;
  color: string;
  borderColor: string;
  bgActive: string;
  reportName: string;
  templates: { icon: string; label: string }[];
  sections: ReportSection[];
}

export const CATEGORIES: CategoryDef[] = [
  {
    icon: '🛢',
    label: '유출유 확산예측',
    desc: 'KOSPS · OpenDrift · POSEIDON',
    color: 'var(--color-accent)',
    borderColor: 'rgba(6,182,212,0.4)',
    bgActive: 'rgba(6,182,212,0.08)',
    reportName: '유출유 확산예측 보고서',
    templates: [
      { icon: '🔬', label: '예측보고서' },
      { icon: '📋', label: '초기보고서' },
      { icon: '📊', label: '지휘부 보고' },
      { icon: '📑', label: '종합보고서' },
    ],
    sections: [
      {
        id: 'oil-spread',
        icon: '🌊',
        title: '유출유 확산예측 결과',
        desc: 'KOSPS/OpenDrift/POSEIDON 예측 결과 및 비교',
        checked: true,
      },
      {
        id: 'oil-pollution',
        icon: '📊',
        title: '오염종합상황',
        desc: '유출량, 풍화량, 해상잔유량, 오염면적',
        checked: true,
      },
      {
        id: 'oil-sensitive',
        icon: '🐟',
        title: '민감자원 현황',
        desc: '어장정보, 양식업, 환경생태 자원',
        checked: true,
      },
      {
        id: 'oil-coastal',
        icon: '🏖',
        title: '해안부착 현황',
        desc: '해안 부착 위치, 시간, 오염 길이',
        checked: true,
      },
      {
        id: 'oil-defense',
        icon: '🛡',
        title: '방제전략·자원배치',
        desc: '방제방법, 방제자원 배치 계획',
        checked: true,
      },
      {
        id: 'oil-tide',
        icon: '🌊',
        title: '조석·기상정보',
        desc: '사고 해역 조석·기상 현황',
        checked: true,
      },
    ],
  },
  {
    icon: '🧪',
    label: 'HNS 대기확산',
    desc: 'ALOHA · WRF-Chem',
    color: 'var(--color-accent)',
    borderColor: 'rgba(6,182,212,0.4)',
    bgActive: 'rgba(6,182,212,0.08)',
    reportName: 'HNS 대기확산 예측보고서',
    templates: [
      { icon: '🧪', label: 'HNS 예측보고서' },
      { icon: '📋', label: '초기보고서' },
      { icon: '📊', label: '지휘부 보고' },
      { icon: '🆘', label: 'EmS 대응보고' },
    ],
    sections: [
      {
        id: 'hns-atm',
        icon: '💨',
        title: '대기확산 예측 결과',
        desc: 'ALOHA/WRF-Chem 모델 확산 결과',
        checked: true,
      },
      {
        id: 'hns-hazard',
        icon: '⚠️',
        title: '위험구역·방제거리',
        desc: 'ERPGs 기준 위험구역 범위',
        checked: true,
      },
      {
        id: 'hns-substance',
        icon: '🧬',
        title: 'HNS 물질정보',
        desc: '물질 특성, 독성, UN번호',
        checked: true,
      },
      {
        id: 'hns-ppe',
        icon: '🛡',
        title: 'PPE·대응장비',
        desc: '개인보호장비, 대응장비 배치',
        checked: true,
      },
      {
        id: 'hns-facility',
        icon: '🏫',
        title: '영향시설·대피현황',
        desc: '주변 시설, 인구, 대피 계획',
        checked: true,
      },
      {
        id: 'hns-3d',
        icon: '📐',
        title: '3D 공간분포',
        desc: '수직·수평 농도 분포',
        checked: false,
      },
      {
        id: 'hns-weather',
        icon: '🌊',
        title: '기상·해상 조건',
        desc: '풍향·풍속, 대기안정도',
        checked: true,
      },
    ],
  },
  {
    icon: '🚨',
    label: '긴급구난',
    desc: '복원성 · 좌초위험 분석',
    color: 'var(--color-accent)',
    borderColor: 'rgba(6,182,212,0.4)',
    bgActive: 'rgba(6,182,212,0.08)',
    reportName: '긴급구난 상황보고서',
    templates: [
      { icon: '🚨', label: '긴급구난 상황보고' },
      { icon: '📋', label: '초기보고서' },
      { icon: '📊', label: '지휘부 보고' },
      { icon: '📑', label: '종합보고서' },
    ],
    sections: [
      {
        id: 'rescue-safety',
        icon: '🚢',
        title: '선박 안전성 평가',
        desc: 'GM, 경사각, 트림 분석',
        checked: true,
      },
      {
        id: 'rescue-timeline',
        icon: '⚡',
        title: '사고 유형·경과',
        desc: '사고 유형별 타임라인',
        checked: true,
      },
      {
        id: 'rescue-casualty',
        icon: '👥',
        title: '인명현황',
        desc: '인원 현황, 구조 상태',
        checked: true,
      },
      {
        id: 'rescue-resource',
        icon: '🛟',
        title: '구난 자원 현황',
        desc: '예인선, 헬기, 구난 장비 배치',
        checked: true,
      },
      {
        id: 'rescue-grounding',
        icon: '🗺',
        title: '좌초위험 해역',
        desc: '좌초 위험 구역 분석',
        checked: true,
      },
      {
        id: 'rescue-weather',
        icon: '🌊',
        title: '기상·해상 조건',
        desc: '파고, 풍속, 조류 현황',
        checked: true,
      },
    ],
  },
];

// 카테고리별 샘플 데이터
export const sampleOilData = {
  spread: { kosps: '10.2 km', openDrift: '25.1 km', poseidon: '9.1 km' },
  pollution: {
    spillAmount: '1.00 kℓ',
    weathered: '0.09 kℓ',
    seaRemain: '0.23 kℓ',
    pollutionArea: '3.93 km²',
    coastAttach: '0.67 kℓ',
    coastLength: '0.45 km',
    oilType: 'BUNKER_C',
  },
  sensitive: [
    { label: '마을어업 131ha' },
    { label: '복합양식업 35ha' },
    { label: '어류등양식업 36ha' },
    { label: '갯벌 4,013ha' },
  ],
  coastal: { firstTime: '14:30', coastLength: '0.45 km' },
  tide: { highTide1: '06:24 (1.82m)', lowTide: '12:51 (0.34m)', highTide2: '18:47 (1.95m)' },
};
export const sampleHnsData = {
  substance: {
    name: '벤젠 (Benzene)',
    un: 'UN 1114',
    cas: '71-43-2',
    class: '3류 인화성 액체',
    toxicity: 'ERPG-2: 50 ppm / ERPG-3: 150 ppm',
  },
  hazard: { erpg2: '1.8 km', erpg3: '0.6 km', evacuation: '2.5 km' },
  atm: { aloha: '2.1 km', wrfChem: '1.8 km' },
  ppe: ['Level B 화학복', 'SCBA 공기호흡기', '내화학장갑', '화학보호장화'],
  facility: { schools: 2, hospitals: 1, population: '약 12,400명' },
};
export const sampleRescueData = {
  safety: { gm: '0.82 m', heel: '8.5°', trim: '1.2 m (선미)', status: '주의' },
  casualty: { total: 25, rescued: 22, missing: 2, injured: 1 },
  resources: [
    { type: '예인선', name: '해양1호', eta: '현장 도착', status: '투입중' },
    { type: '구난선', name: 'SMIT Salvage', eta: '02-10 14:00', status: '이동중' },
    { type: '헬기', name: '해경 B-512', eta: '30분', status: '대기중' },
  ],
  grounding: { risk: '높음', nearestShallow: '1.2 NM (SE방향)', depth: '12.5 m' },
};
