/**
 * 외부호출 설정 API 클라이언트
 */

import { apiClient } from "./client";

// 외부호출 설정 관련 상수들
export const CALL_TYPE_OPTIONS = [
  { value: "rest-api", label: "REST API" },
  { value: "webhook", label: "Webhook" },
  { value: "email", label: "이메일" },
] as const;

export const API_TYPE_OPTIONS = [
  { value: "generic", label: "일반 API" },
  { value: "slack", label: "Slack" },
  { value: "discord", label: "Discord" },
  { value: "teams", label: "Microsoft Teams" },
] as const;

export const ACTIVE_STATUS_OPTIONS = [
  { value: "Y", label: "활성" },
  { value: "N", label: "비활성" },
] as const;

export interface ExternalCallConfig {
  id?: number;
  config_name: string;
  call_type: string;
  api_type?: string;
  config_data: any;
  description?: string;
  company_code?: string;
  is_active?: string;
  created_by?: string;
  updated_by?: string;
}

export interface ExternalCallConfigFilter {
  company_code?: string;
  is_active?: string;
  call_type?: string;
  api_type?: string;
}

/**
 * 외부호출 설정 API 클래스
 */
export class ExternalCallConfigAPI {
  /**
   * 외부호출 설정 목록 조회
   */
  static async getConfigs(filter: ExternalCallConfigFilter = {}): Promise<{
    success: boolean;
    data?: ExternalCallConfig[];
    error?: string;
  }> {
    try {
      const params = new URLSearchParams();
      Object.entries(filter).forEach(([key, value]) => {
        if (value) params.append(key, value);
      });

      const response = await apiClient.get(`/external-call-configs?${params.toString()}`);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 목록 조회 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }

  /**
   * 외부호출 설정 상세 조회
   */
  static async getConfigById(id: number): Promise<{
    success: boolean;
    data?: ExternalCallConfig;
    error?: string;
  }> {
    try {
      const response = await apiClient.get(`/external-call-configs/${id}`);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 상세 조회 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }

  /**
   * 외부호출 설정 생성
   */
  static async createConfig(data: Omit<ExternalCallConfig, "id">): Promise<{
    success: boolean;
    data?: ExternalCallConfig;
    error?: string;
  }> {
    try {
      const response = await apiClient.post("/external-call-configs", data);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 생성 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }

  /**
   * 외부호출 설정 수정
   */
  static async updateConfig(
    id: number,
    data: Partial<ExternalCallConfig>,
  ): Promise<{
    success: boolean;
    data?: ExternalCallConfig;
    error?: string;
  }> {
    try {
      const response = await apiClient.put(`/external-call-configs/${id}`, data);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 수정 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }

  /**
   * 외부호출 설정 삭제
   */
  static async deleteConfig(id: number): Promise<{
    success: boolean;
    error?: string;
  }> {
    try {
      const response = await apiClient.delete(`/external-call-configs/${id}`);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 삭제 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }

  /**
   * 외부호출 설정 테스트
   */
  static async testConfig(id: number): Promise<{
    success: boolean;
    message?: string;
    error?: string;
  }> {
    try {
      const response = await apiClient.post(`/external-call-configs/${id}/test`);
      return response.data;
    } catch (error) {
      console.error("외부호출 설정 테스트 실패:", error);
      return {
        success: false,
        error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다.",
      };
    }
  }
}
