"""Telegram Suite Schemas for DSCons ERP."""

from __future__ import annotations

from enum import Enum
from typing import Any

from pydantic import BaseModel, Field


class TelegramAlertSeverity(str, Enum):
    """Severity levels for Telegram notifications."""

    INFO = "INFO"
    WARNING = "WARNING"
    CRITICAL = "CRITICAL"
    SUCCESS = "SUCCESS"


class TelegramAlertType(str, Enum):
    """Categorized alert types for construction operations."""

    EVM_VARIANCE = "EVM_VARIANCE"
    INVOICE_SYNC = "INVOICE_SYNC"
    INVOICE_TAX_RISK = "INVOICE_TAX_RISK"
    SITE_DIARY_SUBMITTED = "SITE_DIARY_SUBMITTED"
    QUALITY_INSPECTION_KCS = "QUALITY_INSPECTION_KCS"
    SAFETY_HSE_ALERT = "SAFETY_HSE_ALERT"
    EQUIPMENT_SHIFT = "EQUIPMENT_SHIFT"
    SYSTEM_NOTIFICATION = "SYSTEM_NOTIFICATION"


class TelegramSendMessageRequest(BaseModel):
    """Generic Telegram message request."""

    chat_id: str | None = None
    text: str
    parse_mode: str = "HTML"
    disable_web_page_preview: bool = False
    reply_markup: dict[str, Any] | None = None


class TelegramAlertRequest(BaseModel):
    """Structured alert request for construction ERP events."""

    alert_type: TelegramAlertType = TelegramAlertType.SYSTEM_NOTIFICATION
    severity: TelegramAlertSeverity = TelegramAlertSeverity.INFO
    title: str
    project_name: str | None = None
    details: list[str] = Field(default_factory=list)
    action_url: str | None = None
    chat_id: str | None = None


class TelegramSiteDiaryNotificationRequest(BaseModel):
    """Site diary event notification payload."""

    project_code: str
    project_name: str
    shift_date: str
    weather: str
    workforce_count: int
    machine_count: int
    activities: list[str] = Field(default_factory=list)
    supervisor_notes: str | None = None
    chat_id: str | None = None


class TelegramProcessCommandRequest(BaseModel):
    """Direct command execution payload."""

    command: str
    chat_id: str = "default_chat"
    user_name: str = "Engineer"
    project_id: str | None = None


class TelegramResponse(BaseModel):
    """Standardized response from Telegram Suite."""

    ok: bool
    message_id: str | int | None = None
    status: str
    details: dict[str, Any] = Field(default_factory=dict)


class TelegramServiceStatus(BaseModel):
    """Status report for Telegram integration."""

    enabled: bool
    bot_configured: bool
    default_chat_configured: bool
    live_gateway: bool
    supported_commands: list[str]
    webhook_url: str | None = None
