import { Router } from "express";
import {
  getCategoryValueCascadingGroups,
  getCategoryValueCascadingGroupById,
  getCategoryValueCascadingByCode,
  createCategoryValueCascadingGroup,
  updateCategoryValueCascadingGroup,
  deleteCategoryValueCascadingGroup,
  saveCategoryValueCascadingMappings,
  getCategoryValueCascadingOptions,
  getCategoryValueCascadingParentOptions,
  getCategoryValueCascadingChildOptions,
  getCategoryValueCascadingMappingsByTable,
} from "../controllers/categoryValueCascadingController";
import { authenticateToken } from "../middleware/authMiddleware";

const router = Router();

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

// ============================================
// 카테고리 값 연쇄관계 그룹 CRUD
// ============================================

// 그룹 목록 조회
router.get("/groups", getCategoryValueCascadingGroups);

// 그룹 상세 조회 (ID)
router.get("/groups/:groupId", getCategoryValueCascadingGroupById);

// 관계 코드로 조회
router.get("/code/:code", getCategoryValueCascadingByCode);

// 그룹 생성
router.post("/groups", createCategoryValueCascadingGroup);

// 그룹 수정
router.put("/groups/:groupId", updateCategoryValueCascadingGroup);

// 그룹 삭제
router.delete("/groups/:groupId", deleteCategoryValueCascadingGroup);

// ============================================
// 카테고리 값 연쇄관계 매핑
// ============================================

// 매핑 일괄 저장
router.post("/groups/:groupId/mappings", saveCategoryValueCascadingMappings);

// ============================================
// 연쇄 옵션 조회 (실제 드롭다운에서 사용)
// ============================================

// 부모 카테고리 값 목록 조회
router.get("/parent-options/:code", getCategoryValueCascadingParentOptions);

// 자식 카테고리 값 목록 조회 (매핑 설정 UI용)
router.get("/child-options/:code", getCategoryValueCascadingChildOptions);

// 연쇄 옵션 조회 (부모 값 기반 자식 옵션)
router.get("/options/:code", getCategoryValueCascadingOptions);

// ============================================
// 테이블별 매핑 조회 (테이블 목록 표시용)
// ============================================

// 테이블명으로 해당 테이블의 모든 연쇄관계 매핑 조회
router.get(
  "/table/:tableName/mappings",
  getCategoryValueCascadingMappingsByTable
);

export default router;
