package com.erp.controller;

import com.erp.dto.ApiResponse;
import com.erp.service.TestButtonDataflowService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * Test Button Dataflow Controller — 추가 엔드포인트
 *
 * testButtonDataflowRoutes.ts 에서 buttonDataflowRoutes 에 없는
 * 두 가지 추가 엔드포인트만 담당한다:
 *
 *   GET /api/test-button-dataflow/relationships/all  — 버튼 제어용 전체 관계 목록
 *   GET /api/test-button-dataflow/test-status         — 테스트 모드 상태 확인
 *
 * 나머지 엔드포인트(config, diagrams, execute-*, job-status 등)는
 * ButtonDataflowController 가 동일 기본 경로에서 처리한다.
 * Spring MVC 는 @RequestMapping 이 같아도 개별 @GetMapping 경로가 다르면 정상 동작한다.
 */
@RestController
@RequestMapping("/api/test-button-dataflow")
@RequiredArgsConstructor
@Slf4j
public class TestButtonDataflowController {

    private final TestButtonDataflowService service;

    // ─────────────────────────────────────────────────────────
    // GET /relationships/all
    // Node.js: router.get("/relationships/all", getAllRelationships)
    // ─────────────────────────────────────────────────────────

    @GetMapping("/relationships/all")
    public ResponseEntity<ApiResponse<List<Map<String, Object>>>> getAllRelationships(
            @RequestAttribute("company_code") String companyCode) {
        try {
            return ResponseEntity.ok(ApiResponse.success(service.getAllRelationships(companyCode)));
        } catch (Exception e) {
            log.error("전체 관계 목록 조회 오류", e);
            return ResponseEntity.status(500)
                    .body(ApiResponse.error("전체 관계 목록 조회 중 오류가 발생했습니다."));
        }
    }

    // ─────────────────────────────────────────────────────────
    // GET /test-status
    // Node.js: router.get("/test-status", (req, res) => res.json({...}))
    // ─────────────────────────────────────────────────────────

    @GetMapping("/test-status")
    public ResponseEntity<ApiResponse<Map<String, Object>>> getTestStatus(
            @RequestAttribute("company_code") String companyCode) {
        return ResponseEntity.ok(ApiResponse.success(service.getTestStatus(companyCode)));
    }
}
