"""Alert schemas for request/response validation."""
import uuid
from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field


# ============================================================
# Alert Schemas
# ============================================================

class AlertResponse(BaseModel):
    """告警响应"""
    id: uuid.UUID
    brand_id: uuid.UUID
    user_id: uuid.UUID
    alert_type: str
    severity: str
    title: str
    message: str
    data: Optional[dict] = None
    is_read: bool
    created_at: datetime

    model_config = {"from_attributes": True}


class AlertListResponse(BaseModel):
    """告警列表响应"""
    items: list[AlertResponse]
    total: int


class AlertUnreadCountResponse(BaseModel):
    """未读告警数量响应"""
    unread_count: int


class AlertReadResponse(BaseModel):
    """标记已读响应"""
    id: uuid.UUID
    is_read: bool

    model_config = {"from_attributes": True}


class AlertReadAllResponse(BaseModel):
    """全部标记已读响应"""
    updated_count: int


# ============================================================
# AlertSetting Schemas
# ============================================================

class AlertSettingResponse(BaseModel):
    """告警设置响应"""
    id: uuid.UUID
    brand_id: uuid.UUID
    user_id: uuid.UUID
    alert_type: str
    enabled: bool
    threshold: Optional[float] = None
    created_at: datetime
    updated_at: datetime

    model_config = {"from_attributes": True}


class AlertSettingUpdate(BaseModel):
    """告警设置更新"""
    enabled: Optional[bool] = None
    threshold: Optional[float] = Field(None, ge=0, le=100, description="阈值（0-100）")


class AlertSettingCreate(BaseModel):
    """告警设置创建"""
    brand_id: uuid.UUID
    alert_type: str = Field(
        ...,
        pattern=r"^(score_drop|score_rise|negative_sentiment|competitor_overtake|new_platform_mention)$",
    )
    enabled: bool = True
    threshold: Optional[float] = Field(None, ge=0, le=100, description="阈值（0-100）")


class AlertSettingListResponse(BaseModel):
    """告警设置列表响应"""
    items: list[AlertSettingResponse]
    total: int


class AlertSettingBulkUpdate(BaseModel):
    """批量更新告警设置"""
    settings: list[AlertSettingCreate]
