from sqlalchemy import Integer, Boolean, ForeignKey
from sqlalchemy.orm import relationship, Mapped, mapped_column
from typing import Optional
from src.apps.base.models.base import Base

class CustomerUsers(Base):
    """
    CustomersUsers Model: ORM class for CustomersUsers Entity
    """

    __tablename__ = "customer_users"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    is_owner: Mapped[bool] = mapped_column(Boolean, default=False)

    user_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id"), nullable=True)
    user: Mapped[Optional["User"]] = relationship("User", foreign_keys=[user_id], uselist=False)

    customer_id: Mapped[int] = mapped_column(Integer, ForeignKey("customers.id"))
    customer: Mapped["Customer"] = relationship("Customer", foreign_keys=[customer_id], uselist=False)

    contact_id: Mapped[Optional[int]] = mapped_column("contact_id", ForeignKey("customer_contacts.id"), nullable=True)
    contact: Mapped[Optional["CustomerContact"]] = relationship("CustomerContact", foreign_keys=[contact_id], uselist=False)

    merchant_id: Mapped[int] = mapped_column(Integer, ForeignKey("merchants.id"))
    merchant: Mapped["Merchant"] = relationship("Merchant")
