import { Router } from "express";
import {
  getCategoryColumns,
  getAllCategoryColumns,
  getCategoryValues,
  addCategoryValue,
  updateCategoryValue,
  deleteCategoryValue,
  bulkDeleteCategoryValues,
  reorderCategoryValues,
  getColumnMapping,
  createColumnMapping,
  getLogicalColumns,
  deleteColumnMapping,
  deleteColumnMappingsByColumn,
  getSecondLevelMenus,
  getCategoryLabelsByCodes,
} from "../controllers/tableCategoryValueController";
import { authenticateToken } from "../middleware/authMiddleware";

const router = Router();

// 모든 라우트에 인증 미들웨어 적용
router.use(authenticateToken);

// 모든 테이블의 카테고리 컬럼 목록 조회 (Select 옵션 설정용)
// 주의: 더 구체적인 라우트보다 먼저 와야 함
router.get("/all-columns", getAllCategoryColumns);

// 테이블의 카테고리 컬럼 목록 조회
router.get("/:tableName/columns", getCategoryColumns);

// 카테고리 값 목록 조회
router.get("/:tableName/:columnName/values", getCategoryValues);

// 카테고리 값 추가
router.post("/values", addCategoryValue);

// 카테고리 값 수정
router.put("/values/:valueId", updateCategoryValue);

// 카테고리 값 삭제
router.delete("/values/:valueId", deleteCategoryValue);

// 카테고리 값 일괄 삭제
router.post("/values/bulk-delete", bulkDeleteCategoryValues);

// 카테고리 값 순서 변경
router.post("/values/reorder", reorderCategoryValues);

// 카테고리 코드로 라벨 조회
router.post("/labels-by-codes", getCategoryLabelsByCodes);

// ================================================
// 컬럼 매핑 관련 라우트 (논리명 ↔ 물리명)
// ================================================

// 2레벨 메뉴 목록 조회 (메뉴 선택용)
router.get("/second-level-menus", getSecondLevelMenus);

// 컬럼 매핑 조회
router.get("/column-mapping/:tableName/:menuObjid", getColumnMapping);

// 논리적 컬럼 목록 조회
router.get("/logical-columns/:tableName/:menuObjid", getLogicalColumns);

// 컬럼 매핑 생성/수정
router.post("/column-mapping", createColumnMapping);

// 테이블+컬럼 기준 매핑 삭제 (메뉴 선택 변경 시 기존 매핑 모두 삭제용)
// 주의: 더 구체적인 라우트가 먼저 와야 함 (3개 세그먼트 > 1개 세그먼트)
router.delete("/column-mapping/:tableName/:columnName/all", deleteColumnMappingsByColumn);

// 컬럼 매핑 삭제 (단일)
router.delete("/column-mapping/:mappingId", deleteColumnMapping);

export default router;

