import uuid

from typing import Optional
from pydantic import BaseModel, Field, ConfigDict


class EnterpriseBase(BaseModel):
    cnpj: str = Field(
        ...,
        description="CNPJ da empresa",
        min_length=1,
        max_length=18,
    )
    razaoSocial: str = Field(
        ...,
        description="Razão social da empresa",
        min_length=1,
        max_length=255,
    )
    nomeFantasia: str = Field(
        ...,
        description="Nome fantasia da empresa",
        min_length=1,
        max_length=255,
    )

    model_config = ConfigDict(
        from_attributes=True,
        validate_assignment=True,
    )


class EnterpriseCreate(EnterpriseBase):
    pass


class EnterpriseUpdate(BaseModel):
    cnpj: Optional[str] = Field(None, min_length=1, max_length=18)
    razaoSocial: Optional[str] = Field(None, min_length=1, max_length=255)
    nomeFantasia: Optional[str] = Field(None, min_length=1, max_length=255)

    model_config = ConfigDict(
        from_attributes=True,
        validate_assignment=True,
    )


class Enterprise(EnterpriseBase):
    id: uuid.UUID = Field(..., description="ID da empresa")


class EnterpriseResponse(Enterprise):
    token: Optional[str] = Field(
                        None,
                        description="Token de API gerado para a empresa"
                        )
