import { Router } from "express";
import { FlowExternalDbConnectionController } from "../controllers/flowExternalDbConnectionController";
import { authenticateToken } from "../middleware/authMiddleware";

const router = Router();
const controller = new FlowExternalDbConnectionController();

/**
 * 플로우 전용 외부 DB 연결 라우트
 * 기존 제어관리 외부 DB 연결과 별도
 */

// 모든 외부 DB 연결 목록 조회 (읽기 전용 - 인증 불필요)
// 민감한 정보(비밀번호)는 반환하지 않으므로 안전
router.get("/", (req, res) => controller.getAll(req, res));

// 특정 외부 DB 연결 조회
router.get("/:id", authenticateToken, (req, res) =>
  controller.getById(req, res)
);

// 새 외부 DB 연결 생성
router.post("/", authenticateToken, (req, res) => controller.create(req, res));

// 외부 DB 연결 수정
router.put("/:id", authenticateToken, (req, res) =>
  controller.update(req, res)
);

// 외부 DB 연결 삭제
router.delete("/:id", authenticateToken, (req, res) =>
  controller.delete(req, res)
);

// 외부 DB 연결 테스트
router.post("/:id/test", authenticateToken, (req, res) =>
  controller.testConnection(req, res)
);

// 외부 DB의 테이블 목록 조회 (읽기 전용 - 인증 불필요)
router.get("/:id/tables", (req, res) => controller.getTables(req, res));

// 외부 DB의 특정 테이블의 컬럼 목록 조회 (읽기 전용 - 인증 불필요)
router.get("/:id/tables/:tableName/columns", (req, res) =>
  controller.getTableColumns(req, res)
);

export default router;
