from flask import Blueprint, jsonify, request
from config import config_manager
from utils.plex_utils import PlexManager
from utils.placeholders import ServicePlaceholder

system_bp = Blueprint('system', __name__, url_prefix='/api/system')
MANAGER_MAP = {
    'plex': PlexManager,
    # TODO: 当你实现其他 Manager 后，在这里添加它们
    # 'qbittorrent': QBManager,
    # 'transmission': TransmissionManager,
    # 'emby': EmbyManager,
    # 'fnos': FnosManager,
}
@system_bp.route('/config', methods=['GET'])
def get_system_config():
    """获取系统配置（屏蔽敏感信息）"""
    return jsonify(config_manager.get_config(sensitive=False))

@system_bp.route('/config', methods=['POST'])
def save_system_config():
    """保存系统配置"""
    new_config = request.get_json()
    if not isinstance(new_config, dict):
        return jsonify({"error": "无效的JSON格式"}), 400
    
    success, error = config_manager.save_config(new_config)
    if success:
        return jsonify({"message": "配置保存成功！"})
    else:
        return jsonify({"error": f"保存失败: {error}"}), 500

@system_bp.route('/test_connection', methods=['POST'])
def test_connection():
    """动态测试指定服务的连接"""
    data = request.get_json()
    service_type = data.get('type')
    service_config = data.get('config')
    
    if not service_type or not service_config:
        return jsonify({"error": "请求参数不完整"}), 400
        
    # 3. 动态选择 Manager
    # 从 MANAGER_MAP 中获取对应的类。
    # 如果 service_type 不在映射中（例如 'emby' 还没实现），则默认使用 ServicePlaceholder
    ManagerClass = MANAGER_MAP.get(service_type, ServicePlaceholder)
    
    # 使用从前端实时传来的配置实例化 Manager
    manager_instance = ManagerClass(service_config)
    
    try:
        # 调用实例的 test_connection 方法
        # 我们新的 Manager 返回 (bool, str)，正好符合这里的逻辑
        success, message = manager_instance.test_connection()
        return jsonify({"success": success, "message": message})
    except Exception as e:
        # 添加一个通用异常捕获，防止 Manager 内部的意外错误导致服务器崩溃
        return jsonify({
            "success": False, 
            "message": f"测试时发生内部错误: {str(e)}"
        }), 500