#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
任务模板管理API路由
实现任务模板的列表查询和启用功能
"""

from fastapi import APIRouter, Depends, Path, Query, HTTPException
from sqlalchemy.orm import Session
from typing import Optional, List, Dict, Any
from sqlalchemy import and_

from data.session import get_db
from services.template_service import TemplateService
from utils.logger import get_logger

# 创建路由
router = APIRouter(prefix="/api/vwed-task/template", tags=["VWED任务模板管理"])

# 设置日志
logger = get_logger("app.template_api")

# 标准API响应格式
def api_response(code: int = 200, message: str = "操作成功", data: Any = None) -> Dict[str, Any]:
    """
    标准API响应格式
    
    Args:
        code: 状态码
        message: 响应消息
        data: 响应数据
    
    Returns:
        Dict[str, Any]: 格式化的响应数据
    """
    return {
        "code": code,
        "message": message,
        "data": data
    }

@router.get("/list")
async def get_template_list(
    page: int = Query(1, ge=1, description="页码，默认为1"),
    pageSize: int = Query(10, ge=1, le=100, description="每页记录数，默认为10"),
    templateName: Optional[str] = Query(None, description="模板名称，用于筛选"),
    status: Optional[int] = Query(None, description="状态：0-未启用，1-启用完成"),
    db: Session = Depends(get_db)
):
    """
    获取任务模板列表
    
    Args:
        page: 页码，从1开始
        pageSize: 每页记录数
        templateName: 模板名称，模糊匹配
        status: 状态过滤
        db: 数据库会话
    
    Returns:
        Dict: 包含模板列表和总数的响应
    """
    try:
        # 调用服务层方法获取模板列表
        result = TemplateService.get_template_list(
            db=db,
            page=page,
            page_size=pageSize,
            template_name=templateName,
            status=status
        )
        
        return api_response(data=result)
    
    except Exception as e:
        logger.error(f"获取任务模板列表失败: {str(e)}")
        raise HTTPException(status_code=500, detail=f"获取任务模板列表失败: {str(e)}")

@router.post("/enable/{id}")
async def enable_template(
    id: str = Path(..., description="模板ID"),
    db: Session = Depends(get_db)
):
    """
    启用指定的任务模板
    
    当一个模板被启用时，之前已启用的模板会自动被禁用，
    确保系统中始终只有一个处于激活状态的模板。
    
    Args:
        id: 模板ID
        db: 数据库会话
    
    Returns:
        Dict: 操作结果
    """
    try:
        # 调用服务层方法启用模板
        TemplateService.enable_template(db=db, template_id=id)
        return api_response(message="模板启用成功")
    
    except Exception as e:
        if "模板不存在" in str(e):
            return api_response(code=404, message=str(e))
        
        if "已处于启用状态" in str(e):
            return api_response(code=200, message=f"该模板已启用，无需重复操作")
        
        logger.error(f"模板启用失败: {str(e)}")
        raise HTTPException(status_code=500, detail=f"模板启用失败: {str(e)}")

@router.get("/enabled")
async def get_enabled_template(
    db: Session = Depends(get_db)
):
    """
    获取当前启用的任务模板
    Args:
        db: 数据库会话
    Returns:
        Dict: 包含启用模板的响应
    """
    try:
        # 调用服务层方法获取启用的模板
        template = TemplateService.get_enabled_template(db=db)
        
        if not template:
            return api_response(code=404, message="当前没有启用的模板")
        
        return api_response(data=template)
    
    except Exception as e:
        logger.error(f"获取启用的任务模板失败: {str(e)}")
        raise HTTPException(status_code=500, detail=f"获取启用的任务模板失败: {str(e)}")

@router.get("/{id}")
async def get_template_detail(
    id: str = Path(..., description="模板ID"),
    db: Session = Depends(get_db)
):
    """
    获取任务模板详情
    
    Args:
        id: 模板ID
        db: 数据库会话
    
    Returns:
        Dict: 包含模板详情的响应
    """
    try:
        # 调用服务层方法获取模板详情
        template = TemplateService.get_template_by_id(db=db, template_id=id)
        
        if not template:
            return api_response(code=404, message=f"模板不存在: {id}")
        
        return api_response(data=template)
    
    except Exception as e:
        logger.error(f"获取任务模板详情失败: {str(e)}")
        raise HTTPException(status_code=500, detail=f"获取任务模板详情失败: {str(e)}") 