"""Message template schemas."""

from __future__ import annotations

from datetime import datetime
from typing import Any

from pydantic import Field

from app.models.enums import RuleMatchType, TaskType
from app.schemas.base import CamelModel


class MessageVariantBase(CamelModel):
    name: str = Field(min_length=1, max_length=120)
    body: str = Field(min_length=1)
    weight: int = Field(default=1, ge=1, le=100)
    is_active: bool = True


class MessageVariantCreate(MessageVariantBase):
    pass


class MessageVariantRead(MessageVariantBase):
    id: int
    template_id: int


class MessageTemplateBase(CamelModel):
    name: str = Field(min_length=1, max_length=160)
    description: str | None = None
    category: str = "connection"
    body: str = Field(min_length=1)
    campaign_id: int | None = None
    is_default: bool = False
    is_active: bool = True
    priority: int = 100
    conditions: list[dict[str, Any]] = Field(default_factory=list)
    match_type: RuleMatchType = RuleMatchType.ALL


class MessageTemplateCreate(MessageTemplateBase):
    variants: list[MessageVariantCreate] = Field(default_factory=list)


class MessageTemplateUpdate(CamelModel):
    name: str | None = None
    description: str | None = None
    category: str | None = None
    body: str | None = None
    campaign_id: int | None = None
    is_default: bool | None = None
    is_active: bool | None = None
    priority: int | None = None
    conditions: list[dict[str, Any]] | None = None
    match_type: RuleMatchType | None = None
    variants: list[MessageVariantCreate] | None = None


class MessageTemplateRead(MessageTemplateBase):
    id: int
    created_at: datetime
    updated_at: datetime
    variants: list[MessageVariantRead] = Field(default_factory=list)


class TemplatePreviewRequest(CamelModel):
    body: str
    lead_id: int | None = None
    campaign_id: int | None = None


class TemplatePreviewResponse(CamelModel):
    preview: str
    length: int
    error: str | None = None


class GenerateMessageRequest(CamelModel):
    lead_id: int | None = None
    campaign_id: int | None = None
    task_id: int | None = None
    template_id: int | None = None
    task_type: TaskType = TaskType.CONNECTION_REQUEST
    lead: dict[str, Any] | None = None
    save_to_task: bool = False


class GenerateMessageResponse(CamelModel):
    message: str
    template_id: int | None = None
    template_name: str | None = None
    variant_name: str | None = None
    category: str
    phrases: list[str] = Field(default_factory=list)
    reasons: list[dict[str, Any]] = Field(default_factory=list)
    truncated: bool = False
    length: int = 0
    warnings: list[str] = Field(default_factory=list)


class TemplateMetadata(CamelModel):
    variables: list[dict[str, str]]
    categories: list[str]
    industry_phrases: dict[str, str]
