import hashlib
from typing import Tuple

import requests
from config.config import SystemConfig
from django.conf import settings
from django.core.cache import cache


def get_latest_version() -> Tuple[str, dict]:
    """获取最新版本号及附加数据
    
    返回优先级：
    1. 成功获取API且响应合法 -> 返回 (版本号, 完整数据字典)
    2. 任何异常情况 -> 返回 (默认安全版本 1.0.1, 空字典)

    版本号格式要求：必须符合语义化版本规范(x.y.z)
    """
    default_version = '0.0.0'
    cache_key = 'get_latest_version'
    cache.get(cache_key)
    try:

        response = requests.get(
            SystemConfig.VERSION_CHECK_URL,
            timeout=10,
            params={'software_id': SystemConfig.SOFTWARE_ID},
            headers={'User-Agent': 'DjacoreCMS'})
        response.raise_for_status()
        # 严格解析JSON响应
        json_data = response.json()

        # 版本号字段校验
        version = str(json_data.get('version', '')).strip()

        cache.set(cache_key, (version, json_data.get('data', {})),
                  timeout=82400)
        return version, json_data.get('data', {})

    except Exception as e:
        # 生产环境应记录异常日志
        print('get_latest_version Error:', e)
        return default_version, {}


def _verify_package(file_path):
    """SHA256校验"""
    sha256 = hashlib.sha256()
    with open(file_path, 'rb') as f:
        while chunk := f.read(128 * 1024):
            sha256.update(chunk)
    return sha256.hexdigest() == settings.UPGRADE_SHA256
