from typing import Optional
from uuid import UUID
from sqlalchemy import String, Text, ForeignKey
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from src.database.base import Base


class BrandingConfig(Base):
    """One-to-one branding config per tenant (no auto-generated id — PK is account_id)."""

    __tablename__ = "branding_configs"

    account_id: Mapped[UUID] = mapped_column(
        PG_UUID(as_uuid=True),
        ForeignKey("accounts.id", ondelete="CASCADE"),
        primary_key=True,
    )
    public_site_name: Mapped[Optional[str]] = mapped_column(String(255), nullable=True)
    location_tagline: Mapped[Optional[str]] = mapped_column(String(500), nullable=True)
    accent_color: Mapped[Optional[str]] = mapped_column(String(20), nullable=True, default="#2C5F2E")
    logo_url: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
    favicon_url: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
    custom_css: Mapped[Optional[str]] = mapped_column(Text, nullable=True)

    # Relationship
    account: Mapped[object] = relationship("Account", back_populates="branding")
