# ============================================================
# [도구 모듈] 금융 비서용 도구 모음 (별도 파일로 분리해 재사용)
#   - get_stock_price : yfinance 주가 조회
#   - get_news        : 뉴스 검색 (데모용 더미 — TODO: 실제 API 연동)
#   - get_exchange_rate : 환율 조회 (open.er-api.com, 키 불필요)
#   - calculator      : 계산
# 에이전트는 이 도구들을 '골라' 쓰며, 여러 개를 이어 복합 작업도 한다.
# (예: 주가 조회 → 환율 조회 → 계산 으로 'USD 주가 → 한화 변환')
# ============================================================

from langchain_core.tools import tool


@tool
def calculator(expression: str) -> str:
    """수학 식을 읽어서 계산한다. 예: '300.15 * 1380'"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"계산 오류: {e}"


@tool
def get_stock_price(ticker: str) -> str:
    """yfinance 로 주식 현재가를 조회한다. 한국 주식은 '005930.KS'(삼성전자) 형태, 미국 주식은 'AAPL' 형태."""
    import yfinance as yf

    data = yf.Ticker(ticker).history(period="1d")
    if data.empty:
        return f"'{ticker}' 시세 조회 실패"
    return f"{ticker} 현재가: {round(float(data['Close'].iloc[-1]), 2)}"


@tool
def get_news(query: str) -> str:
    """뉴스에서 키워드로 최신 기사를 검색한다. (현재는 데모용 더미)"""
    # TODO: 네이버/구글 뉴스 API 를 연동해 실제 기사를 검색한다
    if "삼성전자" in query:
        return "삼성전자: 최근 반도체 업황 회복 기대감으로 실적 개선 전망이 나온다."
    return f"'{query}' 뉴스 검색 기능은 아직 구현되지 않았습니다."


@tool
def get_exchange_rate(base: str = "USD", target: str = "KRW") -> str:
    """환율을 조회한다. base=기준 통화(USD), target=대상 통화(KRW)."""
    import requests

    r = requests.get(f"https://open.er-api.com/v6/latest/{base.upper()}")
    rate = r.json().get("rates", {}).get(target.upper())
    if rate is None:
        return "환율 조회에 실패하였습니다."
    return f"1 {base.upper()} = {rate} {target.upper()}"


FIN_TOOLS = [get_stock_price, get_news, get_exchange_rate, calculator]
