"""
Tool_OCR - Translation Schemas (RESERVED)
Request/response models for translation endpoints
"""

from typing import Optional, Dict, List, Any
from pydantic import BaseModel, Field


class TranslationRequest(BaseModel):
    """
    Translation request schema (RESERVED)

    Expected format for document translation requests
    """
    file_id: int = Field(..., description="File ID to translate")
    source_lang: str = Field(..., description="Source language code (zh, en, ja, ko)")
    target_lang: str = Field(..., description="Target language code (zh, en, ja, ko)")
    engine_type: Optional[str] = Field("offline", description="Translation engine (offline, ernie, google, deepl)")
    preserve_structure: bool = Field(True, description="Preserve markdown structure")
    engine_config: Optional[Dict[str, Any]] = Field(None, description="Engine-specific configuration")

    class Config:
        json_schema_extra = {
            "example": {
                "file_id": 1,
                "source_lang": "zh",
                "target_lang": "en",
                "engine_type": "offline",
                "preserve_structure": True,
                "engine_config": {}
            }
        }


class TranslationResponse(BaseModel):
    """
    Translation response schema (RESERVED)

    Expected format for translation results
    """
    task_id: int = Field(..., description="Translation task ID")
    file_id: int
    source_lang: str
    target_lang: str
    engine_type: str
    status: str = Field(..., description="Translation status (pending, processing, completed, failed)")
    translated_file_path: Optional[str] = Field(None, description="Path to translated markdown file")
    progress: float = Field(0.0, description="Translation progress (0.0-1.0)")
    error_message: Optional[str] = None

    class Config:
        json_schema_extra = {
            "example": {
                "task_id": 1,
                "file_id": 1,
                "source_lang": "zh",
                "target_lang": "en",
                "engine_type": "offline",
                "status": "processing",
                "translated_file_path": None,
                "progress": 0.5,
                "error_message": None
            }
        }


class TranslationStatusResponse(BaseModel):
    """Translation task status response (RESERVED)"""
    task_id: int
    status: str
    progress: float
    created_at: str
    completed_at: Optional[str] = None
    error_message: Optional[str] = None


class TranslationConfigRequest(BaseModel):
    """Translation configuration request (RESERVED)"""
    source_lang: str = Field(..., max_length=20)
    target_lang: str = Field(..., max_length=20)
    engine_type: str = Field(..., max_length=50)
    engine_config: Optional[Dict[str, Any]] = None

    class Config:
        json_schema_extra = {
            "example": {
                "source_lang": "zh",
                "target_lang": "en",
                "engine_type": "offline",
                "engine_config": {
                    "model_path": "/path/to/model"
                }
            }
        }


class TranslationConfigResponse(BaseModel):
    """Translation configuration response (RESERVED)"""
    id: int
    user_id: int
    source_lang: str
    target_lang: str
    engine_type: str
    engine_config: Optional[Dict[str, Any]] = None
    created_at: str
    updated_at: str


class TranslationFeatureStatus(BaseModel):
    """Translation feature status response"""
    available: bool = Field(..., description="Whether translation is available")
    status: str = Field(..., description="Feature status (reserved, planned, implemented)")
    message: str = Field(..., description="Status message")
    supported_engines: List[str] = Field(default_factory=list, description="Currently supported engines")
    planned_engines: List[Dict[str, str]] = Field(default_factory=list, description="Planned engines")
    roadmap: Dict[str, Any] = Field(default_factory=dict, description="Implementation roadmap")


class LanguageInfo(BaseModel):
    """Language information"""
    code: str = Field(..., description="Language code (ISO 639-1)")
    name: str = Field(..., description="Language name")
    status: str = Field(..., description="Support status (planned, supported)")
