# -*- coding: utf-8 -*-
"""
客户沟通日志 API
POST /api/v1/logs - 提交日志并触发后台 AI 标签提取
"""

import uuid

from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status
from pydantic import BaseModel, Field
from sqlalchemy.ext.asyncio import AsyncSession

from app.api.deps import get_current_user
from app.core.database import get_db
from app.models.crm_business import CustomerLog
from app.services.ai_workflow import process_log_with_ai

router = APIRouter()


# ---- 请求/响应模型 ----

class LogCreate(BaseModel):
    """提交沟通日志请求"""
    customer_id: uuid.UUID = Field(..., description="关联客户 ID")
    content: str = Field(..., min_length=5, max_length=5000, description="沟通日志内容")


class LogResponse(BaseModel):
    """提交成功响应"""
    id: uuid.UUID
    message: str = "日志已提交，AI 正在后台分析标签和待办"


# ---- 路由 ----

@router.post(
    "",
    response_model=LogResponse,
    status_code=status.HTTP_200_OK,
    summary="提交客户沟通日志",
    tags=["客户日志"],
)
async def create_customer_log(
    body: LogCreate,
    background_tasks: BackgroundTasks,
    db: AsyncSession = Depends(get_db),
    current_user: dict = Depends(get_current_user),
):
    """
    接收前端提交的客户沟通日志：
    1. 立即存入 customer_logs 表
    2. 将 AI 标签提取任务加入 BackgroundTasks 后台队列
    3. 立即返回 200 OK（不等待 AI 处理完成）

    AI 后台任务会：
    - 调用 qwen3:14b 分析日志内容
    - 自动提取最多 3 个客户标签 → customer_tags
    - 自动生成 1 个跟进待办 → follow_up_todos
    """
    # Step 1: 立即写入日志记录
    log = CustomerLog(
        customer_id=body.customer_id,
        content=body.content,
    )
    db.add(log)
    await db.flush()
    await db.refresh(log)

    # Step 2: 将 AI 处理加入后台队列
    # *** 关键：传入 log.id / body.content / body.customer_id 三个值 ***
    # process_log_with_ai 会创建独立的 DB Session，不与当前请求的 db 共享
    background_tasks.add_task(
        process_log_with_ai,
        log_id=log.id,
        content=body.content,
        customer_id=body.customer_id,
    )

    # Step 3: 立即返回（不等待 AI）
    return LogResponse(id=log.id)
