import axios from 'axios';

// Docker 환경에서는 Nginx 프록시를 통해 상대 경로로 API 호출
// 개발 환경에서 직접 백엔드 연결이 필요한 경우 REACT_APP_API_BASE_URL 환경 변수 사용
const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || '';

const api = axios.create({
  baseURL: API_BASE_URL,
  withCredentials: true,
});

export interface SignalWeightSettings {
  // MACD 관련
  macdGoldenCross: number;
  macdDeadCross: number;
  macdHistogramUp: number;
  macdHistogramDown: number;
  macdZeroCrossUp: number;
  macdZeroCrossDown: number;
  
  // Stochastic Slow 관련
  stochOversoldCrossUp: number;
  stochOverboughtCrossDown: number;
  stochOversoldThreshold: number;
  stochOverboughtThreshold: number;
  
  // ADX 관련
  adxStrongUptrend: number;
  adxStrongDowntrend: number;
  adxThreshold: number;
  
  // ADX11 관련
  adx11StrongUptrend: number;
  adx11StrongDowntrend: number;
  adx11Threshold: number;
  
  // CCI13 관련
  cci13StrongUp: number;
  cci13StrongDown: number;
  cci13OverboughtThreshold: number;
  cci13OversoldThreshold: number;
  
  // 거래량 관련
  volumeIncrease: number;
  volumeDecrease: number;
  volumeIncreaseThreshold: number;
  volumeDecreaseThreshold: number;
  
  // 종합 스코어 기준
  buySignalThreshold: number;
  sellSignalThreshold: number;
}

/**
 * 신호 가중치 설정 조회
 */
export const getSignalWeights = async (): Promise<SignalWeightSettings> => {
  try {
    const response = await api.get<SignalWeightSettings>('/api/settings/signal-weights');
    return response.data;
  } catch (error) {
    console.error('신호 가중치 조회 실패:', error);
    // 기본값 반환
    return getDefaultWeights();
  }
};

/**
 * 신호 가중치 설정 저장
 */
export const saveSignalWeights = async (weights: SignalWeightSettings): Promise<void> => {
  try {
    await api.post('/api/settings/signal-weights', weights);
    console.log('신호 가중치 저장 성공');
  } catch (error) {
    console.error('신호 가중치 저장 실패:', error);
    throw error;
  }
};

/**
 * 신호 가중치 초기화 (DEFAULT로 복구)
 */
export const resetSignalWeights = async (): Promise<void> => {
  try {
    await api.post('/api/settings/reset/SIGNAL_WEIGHT');
    console.log('신호 가중치 초기화 성공');
  } catch (error) {
    console.error('신호 가중치 초기화 실패:', error);
    throw error;
  }
};

/**
 * 기본 가중치 값
 */
export const getDefaultWeights = (): SignalWeightSettings => {
  return {
    // MACD
    macdGoldenCross: 3,
    macdDeadCross: -3,
    macdHistogramUp: 1,
    macdHistogramDown: -1,
    macdZeroCrossUp: 2,
    macdZeroCrossDown: -2,
    
    // Stochastic
    stochOversoldCrossUp: 2,
    stochOverboughtCrossDown: -2,
    stochOversoldThreshold: 20,
    stochOverboughtThreshold: 80,
    
    // ADX
    adxStrongUptrend: 1,
    adxStrongDowntrend: -1,
    adxThreshold: 25,
    
    // ADX11
    adx11StrongUptrend: 1,
    adx11StrongDowntrend: -1,
    adx11Threshold: 25,
    
    // CCI13
    cci13StrongUp: 1,
    cci13StrongDown: -1,
    cci13OverboughtThreshold: 100,
    cci13OversoldThreshold: -100,
    
    // 거래량
    volumeIncrease: 1,
    volumeDecrease: -1,
    volumeIncreaseThreshold: 30,
    volumeDecreaseThreshold: -30,
    
    // 종합 스코어
    buySignalThreshold: 3,
    sellSignalThreshold: -3,
  };
};

