// routes/workplaceRoutes.js
const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const workplaceController = require('../controllers/workplaceController');
const {
  generateSafeFilename,
  createFileFilter,
  ALLOWED_IMAGE_EXTENSIONS
} = require('../utils/fileUploadSecurity');

// Multer 설정 - 작업장 레이아웃 이미지 업로드 (보안 강화)
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, path.join(__dirname, '../uploads'));
  },
  filename: (req, file, cb) => {
    // 안전한 랜덤 파일명 생성 (원본 파일명 노출 방지)
    const safeName = generateSafeFilename(file.originalname);
    cb(null, `workplace-layout-${safeName}`);
  }
});

// 보안 강화된 파일 필터
const imageFileFilter = createFileFilter({
  allowedExtensions: ALLOWED_IMAGE_EXTENSIONS,
  allowedMimes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp']
});

const upload = multer({
  storage,
  fileFilter: imageFileFilter,
  limits: {
    fileSize: 5 * 1024 * 1024, // 5MB 제한
    files: 1 // 단일 파일만 허용
  }
});

// ==================== 카테고리(공장) 관리 ====================

// CREATE 카테고리
router.post('/categories', workplaceController.createCategory);

// READ ALL 카테고리
router.get('/categories', workplaceController.getAllCategories);

// READ ACTIVE 카테고리
router.get('/categories/active/list', workplaceController.getActiveCategories);

// READ ONE 카테고리
router.get('/categories/:id', workplaceController.getCategoryById);

// UPDATE 카테고리
router.put('/categories/:id', workplaceController.updateCategory);

// DELETE 카테고리
router.delete('/categories/:id', workplaceController.deleteCategory);

// ==================== 작업장 관리 ====================

// CREATE 작업장
router.post('/', workplaceController.createWorkplace);

// READ ALL 작업장 (쿼리 파라미터로 카테고리 필터링 가능: ?category_id=1)
router.get('/', workplaceController.getAllWorkplaces);

// READ ACTIVE 작업장
router.get('/active/list', workplaceController.getActiveWorkplaces);

// READ ONE 작업장
router.get('/:id', workplaceController.getWorkplaceById);

// UPDATE 작업장
router.put('/:id', workplaceController.updateWorkplace);

// DELETE 작업장
router.delete('/:id', workplaceController.deleteWorkplace);

// ==================== 작업장 지도 영역 관리 ====================

// 카테고리 레이아웃 이미지 업로드
router.post('/categories/:id/layout-image', upload.single('image'), workplaceController.uploadCategoryLayoutImage);

// 작업장 레이아웃 이미지 업로드
router.post('/:id/layout-image', upload.single('image'), workplaceController.uploadWorkplaceLayoutImage);

// CREATE 지도 영역
router.post('/map-regions', workplaceController.createMapRegion);

// READ 카테고리별 지도 영역
router.get('/categories/:categoryId/map-regions', workplaceController.getMapRegionsByCategory);

// READ 작업장별 지도 영역
router.get('/map-regions/workplace/:workplaceId', workplaceController.getMapRegionByWorkplace);

// UPDATE 지도 영역
router.put('/map-regions/:id', workplaceController.updateMapRegion);

// DELETE 지도 영역
router.delete('/map-regions/:id', workplaceController.deleteMapRegion);

module.exports = router;
