# -*- coding: utf-8 -*-

from fastapi import FastAPI, Form, HTTPException, Request,status,APIRouter,Query,Path, Depends, BackgroundTasks
from tools.loglog import logger,log_err_e

from core.respone_format import *
from gpt.get_article2 import GetArticle
from pydantic import BaseModel, ValidationError, conint,Field,conint
from typing import List, Optional,Literal
import asyncio

router = APIRouter()

get_article = GetArticle()


class Word(BaseModel):
    meaning_id:int = Field(..., description="单词的词义id")
    word_id:int = Field(..., description="单词id")
    spell: str = Field(..., description="单词的拼写")
    meaning: str = Field(..., description="单词的意思")


class ArticleRequest(BaseModel):
    core_words: List[Word] = Field(..., description="单词列表")
    take_count: int = 2 
    demo_name: Optional[str] = "无" 
    reading_level: conint(ge=1, le=30) = Field(default=10, description="阅读水平，默认值为10;[8,16,24]小学初中高中")
    article_length:int = Field(default=None,description="需要生成的文章长度，可以不传，不传自己根据reading_level判断")
    exercise_id:int = Field(default=0,description="学案ID，用于日志快速定位")


@router.post("/article/reading-comprehension")
def post_article(
    json_data:ArticleRequest,
    request:Request,
    background_tasks: BackgroundTasks,
):

    json_data = json_data.model_dump()
    real_ip = request.headers.get("X-Real-IP","0.0.0.0")

    core_words = json_data["core_words"]
    take_count = json_data["take_count"]
    demo_name = json_data["demo_name"]
    reading_level = json_data["reading_level"] 
    article_length = json_data["article_length"]
    exercise_id = json_data["exercise_id"]

    try:
        r = get_article.submit_task(
            real_ip=real_ip,
            core_words=core_words,
            take_count=take_count,
            demo_name=demo_name,
            reading_level=reading_level,
            article_length=article_length,
            exercise_id=exercise_id,
            background_tasks=background_tasks
        )
        return r if not isinstance(r,str) else resp_500(message=r)

    except Exception as e:
        log_err_e(e, msg="文章2接口错误/article/reading-comprehension；")
        return resp_500(message=f"{type(e).__name__},{e}")