/**
 * 🧪 테스트 전용 버튼 데이터플로우 라우트 (인증 없음)
 *
 * 개발 환경에서만 사용되는 테스트용 API 엔드포인트
 */

import express from "express";
import {
  getButtonDataflowConfig,
  updateButtonDataflowConfig,
  getAvailableDiagrams,
  getDiagramRelationships,
  getRelationshipPreview,
  executeOptimizedButton,
  executeSimpleDataflow,
  getJobStatus,
  getAllRelationships,
} from "../controllers/buttonDataflowController";
import { AuthenticatedRequest } from "../types/auth";
import config from "../config/environment";

const router = express.Router();

// 🚨 개발 환경에서만 활성화
if (config.nodeEnv !== "production") {
  // 테스트용 사용자 정보 설정 미들웨어
  const setTestUser = (req: AuthenticatedRequest, res: any, next: any) => {
    req.user = {
      userId: "test-user",
      userName: "Test User",
      companyCode: "*",
      email: "test@example.com",
    };
    next();
  };

  // 모든 라우트에 테스트 사용자 설정
  router.use(setTestUser);

  // ============================================================================
  // 🧪 테스트 전용 API 엔드포인트들
  // ============================================================================

  // 버튼별 제어관리 설정 조회
  router.get("/config/:buttonId", getButtonDataflowConfig);

  // 버튼별 제어관리 설정 업데이트
  router.put("/config/:buttonId", updateButtonDataflowConfig);

  // 사용 가능한 관계도 목록 조회
  router.get("/diagrams", getAvailableDiagrams);

  // 특정 관계도의 관계 목록 조회
  router.get("/diagrams/:diagramId/relationships", getDiagramRelationships);

  // 🔥 전체 관계 목록 조회 (버튼 제어용)
  router.get("/relationships/all", getAllRelationships);

  // 관계 미리보기 정보 조회
  router.get(
    "/diagrams/:diagramId/relationships/:relationshipId/preview",
    getRelationshipPreview
  );

  // 최적화된 버튼 실행 (즉시 응답 + 백그라운드)
  router.post("/execute-optimized", executeOptimizedButton);

  // 간단한 데이터플로우 즉시 실행
  router.post("/execute-simple", executeSimpleDataflow);

  // 백그라운드 작업 상태 조회
  router.get("/job-status/:jobId", getJobStatus);

  // 테스트 상태 확인 엔드포인트
  router.get("/test-status", (req: AuthenticatedRequest, res) => {
    res.json({
      success: true,
      message: "테스트 모드 활성화됨",
      user: req.user,
      environment: config.nodeEnv,
    });
  });
} else {
  // 운영 환경에서는 접근 차단
  router.use((req, res) => {
    res.status(403).json({
      success: false,
      message: "테스트 API는 개발 환경에서만 사용 가능합니다.",
    });
  });
}

export default router;
