"""Email domains domain — Pydantic schemas."""
from __future__ import annotations

from datetime import datetime
from typing import Optional
from uuid import UUID

from pydantic import BaseModel


class EmailDomainCreate(BaseModel):
    domain: str


class DnsRecord(BaseModel):
    """A single DNS record the user must add at their registrar."""
    step: int
    purpose: str    # "dkim" | "mail_from_mx" | "mail_from_spf"
    type: str       # "CNAME" | "MX" | "TXT"
    host: str
    value: str
    priority: Optional[int] = None
    ttl: int = 300
    note: Optional[str] = None


class DnsInstructions(BaseModel):
    records: list[DnsRecord]
    propagation_note: str = (
        "DNS changes can take 5 minutes to 72 hours to propagate. SES checks automatically "
        "— no need to click verify repeatedly."
    )


class EmailDomainResponse(BaseModel):
    id: UUID
    workspace_id: UUID
    domain: str
    status: str
    mail_from_domain: Optional[str]
    failure_reason: Optional[str]
    created_at: datetime
    verified_at: Optional[datetime]
    dns_instructions: Optional[DnsInstructions] = None

    model_config = {"from_attributes": True}


class EmailUsageResponse(BaseModel):
    workspace_id: UUID
    period_start: datetime
    period_end: datetime
    included_monthly: int
    consumed_monthly: int
    daily_cap: int
    consumed_today: int
    day_bucket_date: str
    has_override: bool


class EmailQuotaOverrideRequest(BaseModel):
    included_monthly: Optional[int] = None
    daily_cap: Optional[int] = None
    rate_per_1000_minor: Optional[int] = None
    reason: str
