from typing import Any, List

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session

from app.api.v1 import deps
from app.models.user import User, UserRole
from app.schemas.system_config import SystemConfig, SystemConfigUpdate, SystemConfigCreate
from app.services.system_config_service import SystemConfigService

router = APIRouter()

@router.get("/", response_model=List[SystemConfig], summary="获取所有系统配置")
def read_system_configs(
    db: Session = Depends(deps.get_db),
    current_user: User = Depends(deps.get_current_active_user),
) -> Any:
    """
    获取所有系统配置。
    需要超级管理员权限。
    """
    if current_user.role != UserRole.SUPER_ADMIN:
         raise HTTPException(status_code=403, detail="权限不足")
    return SystemConfigService.get_all_configs(db)

@router.post("/", response_model=SystemConfig, summary="设置系统配置")
def update_system_config(
    config_in: SystemConfigCreate,
    db: Session = Depends(deps.get_db),
    current_user: User = Depends(deps.get_current_active_user),
) -> Any:
    """
    创建或更新系统配置。
    需要超级管理员权限。
    """
    if current_user.role != UserRole.SUPER_ADMIN:
        raise HTTPException(status_code=403, detail="权限不足")
        
    config = SystemConfigService.set_config(db, config_in.key, config_in.value, config_in.description)
    return config

@router.get("/public", response_model=List[SystemConfig], summary="获取公开系统配置")
def read_public_system_configs(
    db: Session = Depends(deps.get_db),
) -> Any:
    """
    获取公开的系统配置（如登录开关状态）。
    无需鉴权。
    """
    # Define which keys are public
    public_keys = ["sms_login_pc_enabled", "sms_login_mobile_enabled"]
    
    configs = []
    for key in public_keys:
        val = SystemConfigService.get_config(db, key)
        # Defaults to 'false' if not set
        if val is None:
             val = "false"
        configs.append({"key": key, "value": val, "description": "Public Config", "id": 0}) # Dummy ID for schema compliance if needed or handle better
        
    return configs

