export interface StockData {
  id?: string;
  symbol: string;
  name: string;
  date: string;
  open: number;
  high: number;
  low: number;
  close: number;
  volume: number;
  ema12?: number;
  ema26?: number;
  macdLine?: number;
  signalLine?: number;
  macdHistogram?: number;
}

export interface MacdResult {
  date: string;
  timestamp?: string;  // 분봉/시간봉을 위한 타임스탬프
  open?: number;    // 시가 추가
  high?: number;    // 고가 추가
  low?: number;     // 저가 추가
  close: number;
  volume?: number;  // 거래량 추가
  macdLine: number | null;
  signalLine: number | null;
  macdHistogram: number | null;
  signal: string;
  stochasticK?: number | null;  // Stochastic Slow %K
  stochasticD?: number | null;  // Stochastic Slow %D
  adx?: number | null;          // ADX (ADX 보조지표용)
  plusDI?: number | null;       // +DI (ADX 보조지표용)
  minusDI?: number | null;      // -DI (ADX 보조지표용)
  dx?: number | null;           // DX (Directional Index)
  adxr?: number | null;         // ADXR (ADX Rating)
  dmiAdx?: number | null;       // ADX (DMI 보조지표용)
  dmiPlusDI?: number | null;    // +DI (DMI 보조지표용)
  dmiMinusDI?: number | null;   // -DI (DMI 보조지표용)
  adx11?: number | null;        // ADX (11) - 레거시
  cci13?: number | null;        // CCI (13) - 백엔드 호환
  cci?: number | null;          // CCI (13, 10)
  rsi?: number | null;          // RSI (14)
  trix?: number | null;         // TRIX (12)
  trixSignal?: number | null;   // TRIX Signal Line (9)
  sma5?: number | null;         // 5일 단순이동평균선
  sma10?: number | null;        // 10일 단순이동평균선
  sma12?: number | null;        // 12일 단순이동평균선
  sma20?: number | null;        // 20일 단순이동평균선
  sma26?: number | null;        // 26일 단순이동평균선
  sma50?: number | null;        // 50일 단순이동평균선
  sma60?: number | null;        // 60일 단순이동평균선
  sma120?: number | null;       // 120일 단순이동평균선
  sma200?: number | null;       // 200일 단순이동평균선
  sma300?: number | null;       // 300일 단순이동평균선
  sma480?: number | null;       // 480일 단순이동평균선
  // 일목균형표 (Ichimoku Cloud)
  ichimokuTenkan?: number | null;    // 전환선 (9일)
  ichimokuKijun?: number | null;     // 기준선 (26일)
  ichimokuChikou?: number | null;    // 후행스팬 (26일 전으로 이동)
  ichimokuSenkouA?: number | null;   // 선행스팬1 (26일 앞으로 이동)
  ichimokuSenkouB?: number | null;   // 선행스팬2 (26일 앞으로 이동)
  // 이격도 (Disparity Index)
  disparity?: number | null;         // 이격도 (20일 기준)
  // 볼린저 밴드 (Bollinger Bands)
  bollingerUpper?: number | null;    // 볼린저밴드 상단
  bollingerMiddle?: number | null;   // 볼린저밴드 중심 (SMA20)
  bollingerLower?: number | null;    // 볼린저밴드 하단
  // 신규 보조지표 (15가지)
  newPsychological?: number | null;      // 신심리도
  investPsychological?: number | null;   // 투자심리도
  bwi?: number | null;                   // BWI (볼린저밴드 %B)
  obv?: number | null;                   // OBV (거래량 누적)
  obvSignal?: number | null;             // OBV Signal Line (이동평균)
  williamsR?: number | null;             // Williams %R
  volumeOsc?: number | null;             // VolumeOSC (거래량 오실레이터)
  vr?: number | null;                    // VR (거래량비율)
  vr2?: number | null;                   // VR2 (추가 거래량비율)
  // 정배열/역배열 상태 (Backend에서 계산)
  isPerfectUptrend?: boolean | null;     // 정배열 여부 (MA10 > MA20 > MA60 && MACD > 0)
  isPerfectDowntrend?: boolean | null;   // 역배열 여부 (MA10 < MA20 < MA60 && MACD < 0)
  // ✅ 동적 MA 값 (사용자 설정 기간 지원)
  maValues?: { [key: string]: number };  // 예: { "ma11": 25000.5, "ma25": 24500.0 }
  // ✅ 인덱스 시그니처 추가 (동적 속성 접근 허용)
  [key: string]: any;
}

export interface StockRequest {
  symbol: string;
  startDate?: string;   // 선택적 (백엔드에서 기본값 처리) - YYYY-MM-DD
  endDate?: string;     // 선택적 (백엔드에서 기본값 처리) - YYYY-MM-DD
  endDateTime?: string; // 분봉용 시간 포함 날짜 (YYYY-MM-DDTHH:mm:ss) - endDate보다 우선
  // MACD 파라미터
  fastPeriod?: number;  // 선택적 (기본값: 12)
  slowPeriod?: number;  // 선택적 (기본값: 26)
  signalPeriod?: number; // 선택적 (기본값: 9)
  // Stochastic Slow 파라미터
  stochasticKPeriod?: number;  // %K 기간 (기본값: 12)
  stochasticDPeriod?: number;  // %D 기간 (기본값: 5)
  stochasticSlowing?: number;  // Slowing 기간 (기본값: 5)
  // RSI 파라미터
  rsiPeriod?: number;          // RSI 기간 (기본값: 14)
  // CCI 파라미터
  cciPeriod?: number;          // CCI 기간 (기본값: 13)
  cciSignalPeriod?: number;    // CCI 시그널 기간 (기본값: 10)
  // Williams %R 파라미터
  williamsRPeriod?: number;    // Williams %R 기간 (기본값: 11)
  // ADX / DMI 파라미터
  adxPeriod?: number;          // ADX 기간 (기본값: 14)
  dmiPeriod?: number;          // DMI 기간 (기본값: 14)
  adxSmoothing?: number;       // ADX 스무딩 기간 (기본값: 14)
  // BWI 파라미터
  bwiPeriod?: number;          // BWI 기간 (기본값: 20)
  // OBV 파라미터
  obvPeriod?: number;          // OBV 기간 (기본값: 20)
  obvSignalPeriod?: number;    // OBV 시그널 기간 (기본값: 9)
  // TRIX 파라미터
  trixPeriod?: number;         // TRIX 기간 (기본값: 12)
  trixSignalPeriod?: number;   // TRIX 시그널 기간 (기본값: 9)
  // Volume OSC 파라미터
  volumeOscShortPeriod?: number;  // Volume OSC 단기 기간 (기본값: 10)
  volumeOscLongPeriod?: number;   // Volume OSC 장기 기간 (기본값: 20)
  // VR 파라미터
  vrPeriod?: number;           // VR 기간 (기본값: 10)
  // VR2 파라미터 (조건부 보조지표)
  vr2Enabled?: boolean;        // VR2 활성화 여부 (기본값: false)
  vr2Period?: number;          // VR2 기간 (기본값: 10)
  // Psychological 파라미터
  newPsychologicalPeriod?: number;      // 신심리도 기간 (기본값: 12)
  investPsychologicalPeriod?: number;   // 투자심리도 기간 (기본값: 12)
  // Disparity 파라미터
  disparityUltraShortPeriod?: number;   // 이격도 초단기 기간 (기본값: 5)
  disparityShortPeriod?: number;        // 이격도 단기 기간 (기본값: 10)
  disparityMidPeriod?: number;          // 이격도 중기 기간 (기본값: 20)
  disparityLongPeriod?: number;         // 이격도 장기 기간 (기본값: 60)
  // Bollinger Band 파라미터
  bollingerPeriod?: number;    // 볼린저 밴드 기간 (기본값: 20)
  bollingerStdDev?: number;    // 볼린저 밴드 표준편차 승수 (기본값: 2.0)
  // MA (이동평균선) 파라미터
  maPeriods?: number[];        // ✅ 사용자 정의 MA 기간 리스트 (예: [5, 11, 20, 60])
  interval?: string;    // 시간 간격 (1m, 3m, 5m, 10m, 15m, 30m, 1h, 4h, 1d, 1w, 1M)
  count?: number;       // 요청할 데이터 개수 (기본값: 200)
}

export interface MacdParameters {
  fastPeriod: number;
  slowPeriod: number;
  signalPeriod: number;
}

export interface StockInfo {
  id?: number;
  symbol: string;           // 종목 코드
  name?: string;            // 종목명 (deprecated)
  koreanName: string;       // 한글 종목명
  englishName?: string;     // 영문 종목명
  marketType?: string;      // 시장 타입 (KR, US)
  market?: string;          // 시장 (KOSPI, KOSDAQ, NASDAQ 등) - deprecated
  category?: string;        // 카테고리 (한국주식, 미국주식) - deprecated
  isActive?: boolean;       // 활성화 여부
  isFavorite?: boolean;     // 즐겨찾기 여부
  lastUpdated?: string;     // 마지막 업데이트
  createdAt?: string;       // 생성일시
}