/**
 * 작업 중 문제 신고 라우터
 */

const express = require('express');
const router = express.Router();
const workIssueController = require('../controllers/workIssueController');
const { createRequirePage } = require('../../../shared/middleware/pagePermission');
const { getDb } = require('../dbPool');
const requirePage = createRequirePage(getDb);

// ==================== 카테고리 관리 ====================

// 모든 카테고리 조회
router.get('/categories', workIssueController.getAllCategories);

// 타입별 카테고리 조회 (nonconformity/safety)
router.get('/categories/type/:type', workIssueController.getCategoriesByType);

// 카테고리 생성 (admin 이상)
router.post('/categories', requirePage('factory_work_issues'), workIssueController.createCategory);

// 카테고리 수정 (admin 이상)
router.put('/categories/:id', requirePage('factory_work_issues'), workIssueController.updateCategory);

// 카테고리 삭제 (admin 이상)
router.delete('/categories/:id', requirePage('factory_work_issues'), workIssueController.deleteCategory);

// ==================== 사전 정의 항목 관리 ====================

// 모든 항목 조회
router.get('/items', workIssueController.getAllItems);

// 카테고리별 항목 조회
router.get('/items/category/:categoryId', workIssueController.getItemsByCategory);

// 항목 생성 (admin 이상)
router.post('/items', requirePage('factory_work_issues'), workIssueController.createItem);

// 항목 수정 (admin 이상)
router.put('/items/:id', requirePage('factory_work_issues'), workIssueController.updateItem);

// 항목 삭제 (admin 이상)
router.delete('/items/:id', requirePage('factory_work_issues'), workIssueController.deleteItem);

// ==================== 통계 ====================

// 통계 요약 (support_team 이상)
router.get('/stats/summary', requirePage('factory_work_issues'), workIssueController.getStatsSummary);

// 카테고리별 통계 (support_team 이상)
router.get('/stats/by-category', requirePage('factory_work_issues'), workIssueController.getStatsByCategory);

// 작업장별 통계 (support_team 이상)
router.get('/stats/by-workplace', requirePage('factory_work_issues'), workIssueController.getStatsByWorkplace);

// ==================== 문제 신고 관리 ====================

// 신고 목록 조회
router.get('/', workIssueController.getAllReports);

// 신고 생성
router.post('/', workIssueController.createReport);

// 신고 상세 조회
router.get('/:id', workIssueController.getReportById);

// 신고 수정
router.put('/:id', workIssueController.updateReport);

// 신고 삭제
router.delete('/:id', workIssueController.deleteReport);

// ==================== 상태 관리 ====================

// 신고 접수 (support_team 이상)
router.put('/:id/receive', requirePage('factory_work_issues'), workIssueController.receiveReport);

// 담당자 배정 (support_team 이상)
router.put('/:id/assign', requirePage('factory_work_issues'), workIssueController.assignReport);

// 처리 시작
router.put('/:id/start', workIssueController.startProcessing);

// 처리 완료
router.put('/:id/complete', workIssueController.completeReport);

// 신고 종료 (admin 이상)
router.put('/:id/close', requirePage('factory_work_issues'), workIssueController.closeReport);

// 상태 변경 이력 조회
router.get('/:id/logs', workIssueController.getStatusLogs);

module.exports = router;
