"""Schemas for .rfflow file export and import."""
from datetime import datetime
from typing import Optional, Any
from pydantic import BaseModel, Field

from app.schemas.tree import TreeType


class FlowExportCategory(BaseModel):
    """Category info embedded in export file."""
    name: str
    slug: str


class FlowExportData(BaseModel):
    """The flow payload inside an .rfflow file."""
    name: str
    description: Optional[str] = None
    tree_type: TreeType
    version: int = 1
    author_name: Optional[str] = None
    category: Optional[FlowExportCategory] = None
    tags: list[str] = []
    tree_structure: dict[str, Any]
    intake_form: Optional[list[dict[str, Any]]] = None


class FlowExportEnvelope(BaseModel):
    """Top-level .rfflow file structure."""
    rfflow_version: str = "1.0"
    exported_at: datetime
    source_app: str = "ResolutionFlow"
    flow: FlowExportData


class FlowImportRequest(BaseModel):
    """What the frontend sends after parsing a .rfflow file."""
    rfflow_version: str = Field(..., description="Must be '1.0'")
    exported_at: datetime
    source_app: str = "ResolutionFlow"
    flow: FlowExportData


class FlowImportResponse(BaseModel):
    """Response after importing a flow."""
    tree_id: str
    name: str
    tree_type: str
    status: str = "draft"
    category_created: bool = False
    tags_created: list[str] = []
    validation_warnings: list[str] = []
