import { apiFetch } from './client'
import type {
  StockPrice, CandleData, StockInfo, ThemeGroup, ThemeDetail,
  Kospi200Stock, IndexQuote, Signal, NewsItem, Disclosure, WatchlistItem
} from './types'

export const stockApi = {
  // 현재가 조회
  getPrice: (code: string) =>
    apiFetch<StockPrice>(`/api/stock/${code}`),

  // 일봉 차트 데이터
  getChart: (code: string, type: 'D' | 'W' | 'M' | 'm' = 'D', count?: number) => {
    const params = new URLSearchParams({ type })
    if (count) params.set('count', String(count))
    return apiFetch<CandleData[]>(`/api/stock/${code}/chart?${params}`)
  },

  // 종목 검색
  search: (q: string) =>
    apiFetch<StockInfo[]>(`/api/search?q=${encodeURIComponent(q)}`),

  // 지수 (코스피/코스닥/다우/나스닥)
  getIndices: () =>
    apiFetch<IndexQuote[]>('/api/indices'),

  // 스캐너 신호
  getSignals: () =>
    apiFetch<Signal[]>('/api/signal'),

  // 관심종목 신호
  getWatchlistSignals: () =>
    apiFetch<Signal[]>('/api/watchlist-signal'),

  // 스캐너 상태
  getScannerStatus: () =>
    apiFetch<{ running: boolean }>('/api/scanner/status'),

  // 스캐너 토글
  toggleScanner: () =>
    apiFetch<{ running: boolean }>('/api/scanner/toggle', { method: 'POST' }),

  // 뉴스
  getNews: (code?: string) => {
    const params = code ? `?code=${code}` : ''
    return apiFetch<NewsItem[]>(`/api/news${params}`)
  },

  // 공시
  getDisclosures: (code?: string) => {
    const params = code ? `?code=${code}` : ''
    return apiFetch<Disclosure[]>(`/api/disclosure${params}`)
  },

  // 코스피200
  getKospi200: () =>
    apiFetch<Kospi200Stock[]>('/api/kospi200'),

  // 테마 목록
  getThemes: () =>
    apiFetch<ThemeGroup[]>('/api/themes'),

  // 테마 구성종목
  getThemeStocks: (code: string) =>
    apiFetch<ThemeDetail>(`/api/themes/${code}`),

  // 관심종목 목록
  getWatchlist: () =>
    apiFetch<WatchlistItem[]>('/api/watchlist'),

  // 관심종목 추가
  addWatchlist: (code: string, name: string) =>
    apiFetch<{ ok: boolean }>('/api/watchlist', {
      method: 'POST',
      body: JSON.stringify({ code, name }),
    }),

  // 관심종목 삭제
  removeWatchlist: (code: string) =>
    apiFetch<{ ok: boolean }>(`/api/watchlist/${code}`, { method: 'DELETE' }),
}
