"""
Notification Endpoints
"""

from datetime import datetime
from typing import Literal
from uuid import UUID, uuid4

from fastapi import APIRouter
from pydantic import BaseModel

router = APIRouter()


class NotificationChannel(BaseModel):
    id: str
    type: Literal["telegram", "slack", "line", "email", "discord", "webhook"]
    name: str
    enabled: bool


class NotificationRequest(BaseModel):
    channel_id: str
    message: str
    template_id: str | None = None
    variables: dict | None = None
    priority: Literal["low", "normal", "high", "urgent"] = "normal"


class NotificationResult(BaseModel):
    id: UUID
    status: Literal["queued", "sent", "failed"]
    sent_at: datetime | None = None
    error: str | None = None


# Mock channels
MOCK_CHANNELS: list[NotificationChannel] = [
    NotificationChannel(
        id="telegram-ops",
        type="telegram",
        name="Ops Team",
        enabled=True,
    ),
    NotificationChannel(
        id="slack-alerts",
        type="slack",
        name="Alerts Channel",
        enabled=True,
    ),
    NotificationChannel(
        id="email-oncall",
        type="email",
        name="On-Call Email",
        enabled=True,
    ),
]


@router.get("/channels", response_model=list[NotificationChannel])
async def list_notification_channels() -> list[NotificationChannel]:
    """列出通知頻道"""
    return MOCK_CHANNELS


@router.post("/send", response_model=NotificationResult, status_code=202)
async def send_notification(request: NotificationRequest) -> NotificationResult:
    """發送通知"""
    # TODO: 實際發送通知
    return NotificationResult(
        id=uuid4(),
        status="queued",
    )
