import axios from 'axios';
import { API_CONFIG } from './apiConfig';

const API_BASE_URL = API_CONFIG.baseURL;

/**
 * 알림 조건 전략 DTO
 */
export interface AlertStrategyDto {
  id?: number;
  strategyRuleId: number;
  strategyRuleName?: string;
  enabled?: boolean;
  createdAt?: string;
  updatedAt?: string;
}

const alertStrategyApi = axios.create({
  baseURL: `${API_BASE_URL}/alert-strategies`,
  headers: {
    'Content-Type': 'application/json',
  },
});

/**
 * 모든 알림 전략 조회
 */
export const getAllAlertStrategies = async (): Promise<AlertStrategyDto[]> => {
  console.log('[API] 알림 전략 목록 조회 요청:', {
    url: `${API_BASE_URL}/alert-strategies`
  });
  
  try {
    const response = await alertStrategyApi.get<AlertStrategyDto[]>('');
    
    console.log('[API] 알림 전략 목록 조회 응답:', {
      count: response.data?.length || 0,
      data: response.data
    });
    
    return response.data;
  } catch (error: any) {
    console.error('[API] 알림 전략 목록 조회 에러:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      message: error.message
    });
    throw error;
  }
};

/**
 * 활성화된 알림 전략 조회
 */
export const getEnabledAlertStrategies = async (): Promise<AlertStrategyDto[]> => {
  const response = await alertStrategyApi.get<AlertStrategyDto[]>('/enabled');
  return response.data;
};

/**
 * 알림 전략 추가
 */
export const addAlertStrategy = async (strategyRuleId: number): Promise<AlertStrategyDto> => {
  console.log('[API] 알림 전략 추가 요청:', {
    url: `${API_BASE_URL}/alert-strategies`,
    strategyRuleId
  });
  
  try {
    const response = await alertStrategyApi.post<AlertStrategyDto>('', null, {
      params: { strategyRuleId }
    });
    
    console.log('[API] 알림 전략 추가 응답:', response.data);
    return response.data;
  } catch (error: any) {
    console.error('[API] 알림 전략 추가 에러:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      message: error.message
    });
    throw error;
  }
};

/**
 * 알림 전략 삭제
 */
export const deleteAlertStrategy = async (id: number): Promise<void> => {
  console.log('[API] 알림 전략 삭제 요청:', {
    url: `${API_BASE_URL}/alert-strategies/${id}`,
    id
  });
  
  try {
    await alertStrategyApi.delete(`/${id}`);
    console.log('[API] 알림 전략 삭제 완료:', id);
  } catch (error: any) {
    console.error('[API] 알림 전략 삭제 에러:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      data: error.response?.data,
      message: error.message
    });
    throw error;
  }
};

/**
 * 알림 전략 활성화/비활성화 토글
 */
export const toggleAlertStrategy = async (id: number, enabled: boolean): Promise<AlertStrategyDto> => {
  const response = await alertStrategyApi.put<AlertStrategyDto>(`/${id}/toggle`, null, {
    params: { enabled }
  });
  return response.data;
};
