// 배치관리 전용 라우트 (기존 소스와 완전 분리)
// 작성일: 2024-12-24

import { Router } from "express";
import { BatchManagementController } from "../controllers/batchManagementController";
import { authenticateToken } from "../middleware/authMiddleware";

const router = Router();

/**
 * GET /api/batch-management/stats
 * 배치 대시보드 통계 (전체/활성 배치 수, 오늘·어제 실행/실패 수)
 * 반드시 /batch-configs 보다 위에 등록 (/:id로 잡히지 않도록)
 */
router.get("/stats", authenticateToken, BatchManagementController.getBatchStats);

/**
 * GET /api/batch-management/node-flows
 * 배치 설정에서 노드 플로우 선택용 목록 조회
 */
router.get("/node-flows", authenticateToken, BatchManagementController.getNodeFlows);

/**
 * GET /api/batch-management/connections
 * 사용 가능한 커넥션 목록 조회
 */
router.get("/connections", authenticateToken, BatchManagementController.getAvailableConnections);

/**
 * GET /api/batch-management/connections/:type/tables
 * 내부 DB 테이블 목록 조회
 */
router.get("/connections/:type/tables", authenticateToken, BatchManagementController.getTablesFromConnection);

/**
 * GET /api/batch-management/connections/:type/:id/tables
 * 외부 DB 테이블 목록 조회
 */
router.get("/connections/:type/:id/tables", authenticateToken, BatchManagementController.getTablesFromConnection);

/**
 * GET /api/batch-management/connections/:type/tables/:tableName/columns
 * 내부 DB 테이블 컬럼 정보 조회
 */
router.get("/connections/:type/tables/:tableName/columns", authenticateToken, BatchManagementController.getTableColumns);

/**
 * GET /api/batch-management/connections/:type/:id/tables/:tableName/columns
 * 외부 DB 테이블 컬럼 정보 조회
 */
router.get("/connections/:type/:id/tables/:tableName/columns", authenticateToken, BatchManagementController.getTableColumns);

/**
 * POST /api/batch-management/batch-configs
 * 배치 설정 생성
 */
router.post("/batch-configs", authenticateToken, BatchManagementController.createBatchConfig);

/**
 * GET /api/batch-management/batch-configs
 * 배치 설정 목록 조회
 */
router.get("/batch-configs", authenticateToken, BatchManagementController.getBatchConfigs);

/**
 * GET /api/batch-management/batch-configs/:id
 * 특정 배치 설정 조회
 */
router.get("/batch-configs/:id", authenticateToken, BatchManagementController.getBatchConfigById);

/**
 * GET /api/batch-management/batch-configs/:id/sparkline
 * 해당 배치 최근 24시간 1시간 단위 실행 집계
 */
router.get("/batch-configs/:id/sparkline", authenticateToken, BatchManagementController.getBatchSparkline);

/**
 * GET /api/batch-management/batch-configs/:id/recent-logs
 * 해당 배치 최근 실행 로그 (최대 20건)
 */
router.get("/batch-configs/:id/recent-logs", authenticateToken, BatchManagementController.getBatchRecentLogs);

/**
 * PUT /api/batch-management/batch-configs/:id
 * 배치 설정 업데이트
 */
router.put("/batch-configs/:id", authenticateToken, BatchManagementController.updateBatchConfig);

/**
 * POST /api/batch-management/batch-configs/:id/execute
 * 배치 수동 실행
 */
router.post("/batch-configs/:id/execute", authenticateToken, BatchManagementController.executeBatchConfig);

/**
 * POST /api/batch-management/rest-api/preview
 * REST API 데이터 미리보기
 */
router.post("/rest-api/preview", authenticateToken, BatchManagementController.previewRestApiData);

/**
 * POST /api/batch-management/rest-api/save
 * REST API 배치 저장
 */
router.post("/rest-api/save", authenticateToken, BatchManagementController.saveRestApiBatch);

/**
 * GET /api/batch-management/auth-services
 * 인증 토큰 서비스명 목록 조회
 */
router.get("/auth-services", authenticateToken, BatchManagementController.getAuthServiceNames);

export default router;
