import uuid
from typing import Any

from sqlalchemy import Column
from sqlalchemy.dialects.postgresql import JSONB
from sqlmodel import Field, SQLModel

from app.db.base import TenantModel


class CustomerBase(SQLModel):
    name: str = Field(nullable=False)
    email: str | None = Field(default=None, index=True)
    phone: str | None = Field(default=None, index=True)
    visit_count: int = Field(default=0, nullable=False)
    no_show_count: int = Field(default=0, nullable=False)


class Customer(CustomerBase, TenantModel, table=True):
    __tablename__ = "customer"

    id: str = Field(
        default_factory=lambda: str(uuid.uuid4()),
        primary_key=True,
    )
    tags: list[str] | None = Field(
        default=None,
        sa_column=Column(JSONB),
    )


class CustomerCreate(CustomerBase):
    pass


class CustomerRead(CustomerBase):
    id: str
    restaurant_id: str
    tags: Any | None = None
