from typing import Optional
from uuid import UUID
from datetime import datetime
from pydantic import BaseModel


class BrandingResponse(BaseModel):
    public_site_name: Optional[str] = None
    location_tagline: Optional[str] = None
    accent_color: Optional[str] = None
    logo_url: Optional[str] = None
    favicon_url: Optional[str] = None

    model_config = {"from_attributes": True}


class AccountResponse(BaseModel):
    id: UUID
    organization_name: str
    subdomain: str
    cemetery_type: Optional[str] = None
    contact_email: str
    contact_phone: Optional[str] = None
    address: Optional[str] = None
    status: str
    plan: str
    created_at: datetime
    updated_at: datetime

    model_config = {"from_attributes": True}


class AccountDetailResponse(AccountResponse):
    branding: Optional[BrandingResponse] = None
    credentials_sent_at: Optional[datetime] = None
    account_manager: Optional[str] = None
    size: Optional[str] = None
    signup_source: Optional[str] = None
    activated_at: Optional[datetime] = None
    feature_flags: Optional[dict] = None


class SignupContactResponse(BaseModel):
    name: str
    email: str
    phone: Optional[str] = None
    title: Optional[str] = None


class SignupListItemResponse(BaseModel):
    id: UUID
    subdomain: str
    name: str
    cemetery_type: Optional[str] = None
    plan: str
    status: str
    contact: SignupContactResponse
    size: Optional[str] = None
    signup_source: Optional[str] = None
    account_manager: Optional[str] = None
    feature_flags: Optional[dict] = None
    credentials_sent_at: Optional[datetime] = None
    activated_at: Optional[datetime] = None
    created_at: datetime

    model_config = {"from_attributes": True}


class SignupKpiResponse(BaseModel):
    new: int
    onboarding: int
    active: int
    total: int
