"""
微信API配置文件
用于配置微信小程序/公众号的API相关参数
"""

from typing import Dict, Any

# 微信API配置
WECHAT_API_CONFIG: Dict[str, Any] = {
    # 微信小程序配置
    'miniprogram': {
        'app_id': 'wx6decdf12f9e7a061',
        'app_secret': '6ba58fb365fd87036fe075bde65eade3',
        'code2session_url': 'https://api.weixin.qq.com/sns/jscode2session',
        'grant_type': 'authorization_code'
    },
    
    # 微信公众号配置（如果需要）
    'official_account': {
        'app_id': '',  # 如需要请填入公众号AppID
        'app_secret': '',  # 如需要请填入公众号AppSecret
        'oauth2_url': 'https://api.weixin.qq.com/sns/oauth2/access_token',
        'grant_type': 'authorization_code'
    },
    
    # 请求配置
    'request': {
        'timeout': 10,  # 请求超时时间（秒）
        'max_retries': 3,  # 最大重试次数
        'retry_delay': 1  # 重试延迟（秒）
    }
}

# 微信错误码映射
WECHAT_ERROR_CODES: Dict[int, str] = {
    -1: '系统繁忙，此时请开发者稍候再试',
    0: '请求成功',
    40013: 'invalid appid',
    40029: 'code 无效',
    45011: 'API 调用太频繁，请稍候再试',
    40226: '高风险等级用户，小程序登录拦截',
    # 可以根据需要添加更多错误码
}

def get_wechat_config(platform: str = 'miniprogram') -> Dict[str, Any]:
    """
    获取微信平台配置
    
    Args:
        platform (str): 平台类型，'miniprogram' 或 'official_account'
        
    Returns:
        Dict[str, Any]: 配置信息
    """
    if platform not in WECHAT_API_CONFIG:
        raise ValueError(f"不支持的微信平台类型: {platform}")
    
    config = WECHAT_API_CONFIG[platform].copy()
    config.update(WECHAT_API_CONFIG['request'])
    
    return config

def validate_wechat_config(platform: str = 'miniprogram') -> bool:
    """
    验证微信配置是否完整
    
    Args:
        platform (str): 平台类型
        
    Returns:
        bool: 配置是否完整
    """
    config = WECHAT_API_CONFIG.get(platform, {})
    required_keys = ['app_id', 'app_secret']
    
    # 检查配置是否存在且不为空
    for key in required_keys:
        value = config.get(key, '')
        if not value or value.strip() == '':
            return False
    
    return True

def get_error_message(error_code: int) -> str:
    """
    根据错误码获取错误信息
    
    Args:
        error_code (int): 微信API返回的错误码
        
    Returns:
        str: 错误信息
    """
    return WECHAT_ERROR_CODES.get(error_code, f'未知错误码: {error_code}')
