import { Router } from "express";
import {
  getAdminMenus,
  getUserMenus,
  getPopMenus,
  getMenuInfo,
  saveMenu, // 메뉴 추가
  updateMenu, // 메뉴 수정
  deleteMenu, // 메뉴 삭제
  deleteMenusBatch, // 메뉴 일괄 삭제
  toggleMenuStatus, // 메뉴 상태 토글
  copyMenu, // 메뉴 복사
  getUserList,
  getUserNameMap, // 사용자 ID→이름 맵 (경량)
  getUserInfo, // 사용자 상세 조회
  getUserHistory, // 사용자 변경이력 조회
  changeUserStatus, // 사용자 상태 변경
  resetUserPassword, // 사용자 비밀번호 초기화
  updateProfile, // 프로필 수정
  getDepartmentList, // 부서 목록 조회
  checkDuplicateUserId, // 사용자 ID 중복 체크
  saveUser, // 사용자 등록/수정
  saveUserWithDept, // 사원 + 부서 통합 저장 (NEW!)
  getUserWithDept, // 사원 + 부서 조회 (NEW!)
  deleteUser, // 사용자 삭제 (soft delete)
  getCompanyList,
  getCompanyListFromDB, // 실제 DB에서 회사 목록 조회
  getCompanyByCode, // 회사 단건 조회
  createCompany, // 회사 등록
  updateCompany, // 회사 수정
  deleteCompany, // 회사 삭제
  getUserLocale,
  setUserLocale,
  getTableSchema, // 테이블 스키마 조회
} from "../controllers/adminController";
import {
  getSmartFactoryLogs,
  getSmartFactoryLogStats,
  getSchedules,
  upsertSchedule,
  deleteSchedule,
  getTodayPlanHandler,
  getHolidays,
  addHoliday,
  deleteHoliday,
  getApiKeys,
  saveApiKey,
  deleteApiKey,
  getCompanyUsers,
  sendNow,
} from "../controllers/smartFactoryLogController";
import { authenticateToken } from "../middleware/authMiddleware";
import { requireSuperAdmin } from "../middleware/permissionMiddleware";

const router = Router();

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

// 메뉴 관련 API
router.get("/menus", getAdminMenus);
router.get("/user-menus", getUserMenus);
router.get("/pop-menus", getPopMenus);
router.get("/menus/:menuId", getMenuInfo);
router.post("/menus", saveMenu); // 메뉴 추가
router.post("/menus/:menuObjid/copy", copyMenu); // 메뉴 복사 (NEW!)
router.put("/menus/:menuId", updateMenu); // 메뉴 수정
router.put("/menus/:menuId/toggle", toggleMenuStatus); // 메뉴 상태 토글
router.delete("/menus/batch", deleteMenusBatch); // 메뉴 일괄 삭제 (순서 중요!)
router.delete("/menus/:menuId", deleteMenu); // 메뉴 삭제

// 사용자 관리 API
router.get("/users", getUserList);
router.get("/users/name-map", getUserNameMap); // 사용자 ID→이름 매핑 (경량)
router.get("/users/:userId", getUserInfo); // 사용자 상세 조회
router.get("/users/:userId/history", getUserHistory); // 사용자 변경이력 조회
router.get("/users/:userId/with-dept", getUserWithDept); // 사원 + 부서 조회 (NEW!)
router.patch("/users/:userId/status", changeUserStatus); // 사용자 상태 변경
router.post("/users", saveUser); // 사용자 등록/수정 (기존)
router.post("/users/with-dept", saveUserWithDept); // 사원 + 부서 통합 저장 (NEW!)
router.put("/users/:userId", saveUser); // 사용자 수정 (REST API)
router.put("/profile", updateProfile); // 프로필 수정
router.post("/users/check-duplicate", checkDuplicateUserId); // 사용자 ID 중복 체크
router.post("/users/reset-password", resetUserPassword); // 사용자 비밀번호 초기화
router.delete("/users/:userId", deleteUser); // 사용자 삭제 (soft delete)

// 부서 관리 API
router.get("/departments", getDepartmentList); // 부서 목록 조회

// 회사 관리 API (최고관리자 전용)
router.get("/companies", requireSuperAdmin, getCompanyList);
router.get("/companies/db", requireSuperAdmin, getCompanyListFromDB);
router.get("/companies/:companyCode", requireSuperAdmin, getCompanyByCode);
router.post("/companies", requireSuperAdmin, createCompany);
router.put("/companies/:companyCode", requireSuperAdmin, updateCompany);
router.delete("/companies/:companyCode", requireSuperAdmin, deleteCompany);

// 사용자 로케일 API
router.get("/user-locale", getUserLocale);
router.post("/user-locale", setUserLocale);

// 테이블 스키마 API (엑셀 업로드 컬럼 매핑용)
router.get("/tables/:tableName/schema", getTableSchema);

// 스마트공장 활용 로그 API (최고관리자 전용)
router.get("/smart-factory-log", requireSuperAdmin, getSmartFactoryLogs);
router.get("/smart-factory-log/stats", requireSuperAdmin, getSmartFactoryLogStats);

// 스마트공장 스케줄 관리 (최고관리자 전용)
router.get("/smart-factory-log/schedules", requireSuperAdmin, getSchedules);
router.get("/smart-factory-log/schedules/today-plan", requireSuperAdmin, getTodayPlanHandler);
router.post("/smart-factory-log/schedules", requireSuperAdmin, upsertSchedule);
router.delete("/smart-factory-log/schedules/:companyCode", requireSuperAdmin, deleteSchedule);


// 스마트공장 공휴일 관리 (최고관리자 전용)
router.get("/smart-factory-log/holidays", requireSuperAdmin, getHolidays);
router.post("/smart-factory-log/holidays", requireSuperAdmin, addHoliday);
router.delete("/smart-factory-log/holidays/:id", requireSuperAdmin, deleteHoliday);

// 스마트공장 즉시 전송 (최고관리자 전용)
router.get("/smart-factory-log/users/:companyCode", requireSuperAdmin, getCompanyUsers);
router.post("/smart-factory-log/send-now", requireSuperAdmin, sendNow);

// 스마트공장 API 키 관리 (최고관리자 전용)
router.get("/smart-factory-log/api-keys", requireSuperAdmin, getApiKeys);
router.post("/smart-factory-log/api-keys", requireSuperAdmin, saveApiKey);
router.delete("/smart-factory-log/api-keys/:companyCode", requireSuperAdmin, deleteApiKey);

export default router;
