import tushare as ts
from datetime import datetime, timedelta
import pandas as pd

def validate_stock_code(stock_code: str) -> bool:
    """验证股票代码是否存在"""
    try:
        ts.set_token('a1b1c30c7dbf5507042e939c47fcef0dcea5e215138c2a5ce2f7230d')  # 需要替换为实际token
        pro = ts.pro_api()
        data = pro.stock_basic(ts_code=stock_code)
        return not data.empty
    except:
        return False

def is_trading_day(date_str: str) -> bool:
    """检查是否为交易日"""
    try:
        date = datetime.strptime(date_str, '%Y%m%d')
        ts.set_token('a1b1c30c7dbf5507042e939c47fcef0dcea5e215138c2a5ce2f7230d')  # 需要替换为实际token
        pro = ts.pro_api()
        df = pro.trade_cal(exchange='', start_date=date_str, end_date=date_str)
        return not df.empty and df.iloc[0]['is_open'] == 1
    except:
        return False

def get_previous_trading_day(date_str: str) -> str:
    """获取前一交易日"""
    ts.set_token('a1b1c30c7dbf5507042e939c47fcef0dcea5e215138c2a5ce2f7230d')  # 需要替换为实际token
    pro = ts.pro_api()
    df = pro.trade_cal(exchange='', 
                      start_date=(datetime.strptime(date_str, '%Y%m%d') - timedelta(days=30)).strftime('%Y%m%d'),
                      end_date=date_str)
    if df is None or df.empty:
        return date_str
    trading_days = df[df['is_open'] == 1]['cal_date'].tolist()
    return trading_days[-2] if len(trading_days) > 1 else date_str

def get_stock_name(stock_code: str) -> str:
    """获取股票名称"""
    ts.set_token('a1b1c30c7dbf5507042e939c47fcef0dcea5e215138c2a5ce2f7230d')  # 需要替换为实际token
    pro = ts.pro_api()
    data = pro.stock_basic(ts_code=stock_code)
    return data.iloc[0]['name'] if not data.empty else "未知"