# -*- coding: utf-8 -*-
"""
cache.py — 缓存管理路由

从原 server.py 迁入：get_cache_stats / clear_cache（均需 admin_required）。
"""

from datetime import datetime

from flask import Blueprint, jsonify, request, session

import container
from decorators import admin_required
from utils.audit import log_audit
from utils.response import error_response
from utils.error_codes import ErrorCodes
from utils.logger import get_logger

logger = get_logger(__name__)

bp = Blueprint('cache', __name__)


@bp.route('/api/cache/stats', methods=['GET'])
@admin_required
def get_cache_stats():
    """
    获取缓存统计信息（仅管理员）。

    返回：
      - total_files: 缓存文件总数
      - total_size_mb: 缓存总大小（MB）
      - oldest: 最早缓存时间
      - newest: 最新缓存时间
    """
    try:
        cache = container.get_cache_manager()
        stats = cache.get_stats()

        return jsonify({
            'success': True,
            'stats': stats,
        })
    except Exception as e:
        logger.exception("获取缓存统计接口异常")
        return jsonify(error_response(ErrorCodes.CACHE_READ_ERROR, f'获取缓存统计失败：{str(e)}')), 500


@bp.route('/api/cache/clear', methods=['POST'])
@admin_required
def clear_cache():
    """
    清空所有缓存（仅管理员）。
    """
    try:
        cache = container.get_cache_manager()
        cleared_count = cache.clear_all()

        # 审计日志
        log_audit({
            'timestamp': datetime.now().isoformat(),
            'user': session.get('user', {}).get('username', ''),
            'module': 'troubleshoot',
            'action': 'clear_cache',
            'target': '缓存管理',
            'ip': request.remote_addr or '',
            'cleared_count': cleared_count,
        })

        return jsonify({
            'success': True,
            'message': f'已清除 {cleared_count} 个缓存文件',
            'cleared_count': cleared_count,
        })
    except Exception as e:
        logger.exception("清空缓存接口异常")
        return jsonify(error_response(ErrorCodes.CACHE_WRITE_ERROR, f'清空缓存失败：{str(e)}')), 500
