import uuid

from src.core.database import Base
from sqlalchemy.orm import relationship
from sqlalchemy import Column, String, UniqueConstraint, Index


class Empresa(Base):
    __tablename__ = "empresas"

    id = Column(
        String(36),
        primary_key=True,
        default=lambda: str(uuid.uuid4()),
    )
    cnpj = Column(String(18), nullable=False, unique=True)
    razaoSocial = Column(String(255), nullable=False, name="razaoSocial")
    nomeFantasia = Column(
        String(255),
        nullable=False,
        unique=True,
        name="nomeFantasia",
    )
    token = Column(String(64), nullable=True)

    computadores = relationship(
        "Computer",
        back_populates="empresa",
        lazy="noload")
    times = relationship("Time", back_populates="empresa", lazy="noload")

    __table_args__ = (
        UniqueConstraint("cnpj", name="uq_empresas_cnpj"),
        UniqueConstraint("nomeFantasia", name="uq_empresas_nomeFantasia"),
        Index("cnpj", "cnpj", unique=True),
        Index("nomeFantasia", "nomeFantasia", unique=True),
    )
