package com.zioinfo.cms.integration;

import com.zioinfo.cms.common.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

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

/**
 * GUARDiA 연계 조회 API.
 *
 * <p>모든 응답은 GuardiaHttpClient가 자격증명을 새니타이즈한 결과다.
 * 연계 미가용 시 빈 결과를 반환(폴백) — 호출 측 UI는 비어있는 상태로 정상 동작.
 */
@RestController
@RequestMapping("/api/cms/integration")
@RequiredArgsConstructor
public class IntegrationController {

    private final ItsmClient itsmClient;
    private final MallClient mallClient;
    private final OcrClient ocrClient;
    private final CrmClient crmClient;

    /** 연계 솔루션 헬스 상태 요약. */
    @GetMapping("/status")
    public ApiResponse<Map<String, Object>> status() {
        return ApiResponse.ok(Map.of(
            "itsm", itsmClient.available(),
            "note", "Mall/OCR/CRM 연계는 호출 시 폴백 동작"
        ));
    }

    /** Mall 상품 카탈로그 (상품-콘텐츠 매핑 보조). */
    @GetMapping("/mall/products")
    public ApiResponse<List<Object>> mallProducts() {
        return ApiResponse.ok(mallClient.listProducts());
    }

    /** OCR 추출 결과 (콘텐츠 초안 보조). */
    @GetMapping("/ocr/{documentId}")
    public ApiResponse<Map<String, Object>> ocrExtraction(@PathVariable String documentId) {
        return ApiResponse.ok(ocrClient.getExtraction(documentId));
    }

    /** CRM 고객 인사이트 (개인화 보조). */
    @GetMapping("/crm/insight")
    public ApiResponse<Map<String, Object>> crmInsight(@RequestParam String email) {
        return ApiResponse.ok(crmClient.getCustomerInsight(email));
    }
}
