import { Router } from "express";
import {
  getRoleGroups,
  getRoleGroupById,
  createRoleGroup,
  updateRoleGroup,
  deleteRoleGroup,
  getRoleMembers,
  addRoleMembers,
  updateRoleMembers,
  removeRoleMembers,
  getMenuPermissions,
  setMenuPermissions,
  getUserRoleGroups,
  getAllMenus,
} from "../controllers/roleController";
import { authenticateToken } from "../middleware/authMiddleware";
import { requireAdmin } from "../middleware/permissionMiddleware";

const router = Router();

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

/**
 * 사용자 권한 그룹 조회 (/:id 보다 먼저 정의해야 함)
 */
// 현재 사용자가 속한 권한 그룹 조회
router.get("/user/my-groups", getUserRoleGroups);

// 특정 사용자가 속한 권한 그룹 조회
router.get("/user/:userId/groups", requireAdmin, getUserRoleGroups);

/**
 * 권한 그룹 CRUD
 */
// 권한 그룹 목록 조회 (회사별)
router.get("/", requireAdmin, getRoleGroups);

// 권한 그룹 상세 조회
router.get("/:id", requireAdmin, getRoleGroupById);

// 권한 그룹 생성 (회사 관리자 이상)
router.post("/", requireAdmin, createRoleGroup);

// 권한 그룹 수정 (회사 관리자 이상)
router.put("/:id", requireAdmin, updateRoleGroup);

// 권한 그룹 삭제 (회사 관리자 이상)
router.delete("/:id", requireAdmin, deleteRoleGroup);

/**
 * 권한 그룹 멤버 관리
 */
// 권한 그룹 멤버 목록 조회
router.get("/:id/members", requireAdmin, getRoleMembers);

// 권한 그룹 멤버 일괄 업데이트 (전체 교체)
router.put("/:id/members", requireAdmin, updateRoleMembers);

// 권한 그룹 멤버 추가 (여러 명)
router.post("/:id/members", requireAdmin, addRoleMembers);

// 권한 그룹 멤버 제거 (여러 명)
router.delete("/:id/members", requireAdmin, removeRoleMembers);

/**
 * 메뉴 권한 관리
 */
// 전체 메뉴 목록 조회 (권한 설정용)
router.get("/menus/all", requireAdmin, getAllMenus);

// 메뉴 권한 목록 조회
router.get("/:id/menu-permissions", requireAdmin, getMenuPermissions);

// 메뉴 권한 설정
router.put("/:id/menu-permissions", requireAdmin, setMenuPermissions);

export default router;
