# 读取所有ETF文件 /resources/grouped_etf.json
import json
import os
from typing import List


def get_all_t0() -> List[str]:
    """
    读取/resources/grouped_etf.json文件，获取所有T+0交易的ETF代码
    除了"其他ETF"分类外，其余都是T+0
    
    Returns:
        List[str]: 所有T+0交易的ETF代码列表
    """
    # 获取当前文件所在目录的路径
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 构建json文件的绝对路径
    json_path = os.path.join(os.path.dirname(current_dir), 'resources', 'grouped_etf.json')
    
    # 读取json文件
    with open(json_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 初始化结果列表
    t0_stocks = []
    
    # 遍历所有分类
    for category, stocks in data.items():
        # 跳过"其他ETF"分类
        if category == "其他ETF":
            continue
        
        # 将当前分类下的所有股票代码添加到结果列表中
        for stock in stocks:
            t0_stocks.append(stock["code"])
    
    return t0_stocks


def normalize_stock_code(stock: str) -> str:
    """
    标准化股票代码格式
    
    Args:
        stock (str): 可能是"123456.XSHE"或"123456.SH"或"123456"格式的股票代码
        
    Returns:
        str: 标准化后的股票代码，格式为"123456.XSHE"或"123456.XSHG"
    """
    if '.' not in stock:
        # 如果没有后缀，则根据第一位数字判断交易所
        code = stock.strip()
        if code[0] in ['0', '3']:  # 深交所
            return f"{code}.XSHE"
        else:  # 上交所
            return f"{code}.XSHG"
    else:
        # 已经有后缀，判断是否需要转换
        code, exchange = stock.split('.')
        if exchange.upper() in ['SH', 'XSHG']:
            return f"{code}.XSHG"
        elif exchange.upper() in ['SZ', 'XSHE']:
            return f"{code}.XSHE"
        else:
            # 已经是标准格式或其他格式，直接返回
            return stock


def is_t0(stock: str) -> bool:
    """
    判断给定的股票代码是否属于T+0交易的ETF
    
    Args:
        stock (str): 股票代码，可能是"123456.XSHE"或"123456.SH"或"123456"格式
        
    Returns:
        bool: 如果是T+0交易的ETF则返回True，否则返回False
    """
    # 获取所有T+0股票列表
    t0_list = get_all_t0()
    
    # 标准化输入的股票代码
    normalized_stock = normalize_stock_code(stock)
    
    # 判断标准化后的代码是否在T+0列表中
    return normalized_stock in t0_list


def get_hk_t0() -> List[str]:
    """
    获取所有T+0交易的香港ETF代码
    
    Returns:
        List[str]: 所有T+0交易的香港ETF代码列表
    """
    # 获取当前文件所在目录的路径
    current_dir = os.path.dirname(os.path.abspath(__file__))
    # 构建json文件的绝对路径
    json_path = os.path.join(os.path.dirname(current_dir), 'resources', 'grouped_etf.json')
    
    # 读取json文件
    with open(json_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 初始化结果列表
    hk_t0_stocks = []
    
    # 检查"港股ETF"分类是否存在
    if "港股ETF" in data:
        # 获取所有港股ETF
        for stock in data["港股ETF"]:
            hk_t0_stocks.append(stock["code"])
    
    return hk_t0_stocks

if __name__ == "__main__":
    print(get_hk_t0())
