import express from 'express';
import { listOps, getOps, listScenarios } from './rescueService.js';
import { isValidNumber } from '../middleware/security.js';
import { requireAuth, requirePermission } from '../auth/authMiddleware.js';

const router = express.Router();

// ============================================================
// GET /api/rescue/ops — 구조 작전 목록
// ============================================================
router.get('/ops', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => {
  try {
    const { sttsCd, acdntTpCd, search } = req.query;
    const items = await listOps({
      sttsCd: sttsCd as string | undefined,
      acdntTpCd: acdntTpCd as string | undefined,
      search: search as string | undefined,
    });
    res.json(items);
  } catch (err) {
    console.error('[rescue] 구조 작전 목록 오류:', err);
    res.status(500).json({ error: '구조 작전 목록 조회 실패' });
  }
});

// ============================================================
// GET /api/rescue/ops/:sn — 구조 작전 단건 상세
// ============================================================
router.get('/ops/:sn', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => {
  try {
    const sn = parseInt(req.params.sn as string, 10);
    if (!isValidNumber(sn, 1, 999999)) {
      res.status(400).json({ error: '유효하지 않은 구조 작전 번호' });
      return;
    }
    const item = await getOps(sn);
    if (!item) {
      res.status(404).json({ error: '구조 작전을 찾을 수 없습니다.' });
      return;
    }
    res.json(item);
  } catch (err) {
    console.error('[rescue] 구조 작전 상세 오류:', err);
    res.status(500).json({ error: '구조 작전 상세 조회 실패' });
  }
});

// ============================================================
// GET /api/rescue/ops/:sn/scenarios — 시나리오 목록
// ============================================================
router.get('/ops/:sn/scenarios', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => {
  try {
    const sn = parseInt(req.params.sn as string, 10);
    if (!isValidNumber(sn, 1, 999999)) {
      res.status(400).json({ error: '유효하지 않은 구조 작전 번호' });
      return;
    }
    const scenarios = await listScenarios(sn);
    res.json(scenarios);
  } catch (err) {
    console.error('[rescue] 시나리오 목록 오류:', err);
    res.status(500).json({ error: '시나리오 목록 조회 실패' });
  }
});

export default router;
