import enum
from typing import Generic, TypeVar
from pydantic import BaseModel, ConfigDict, Field, field_validator
from pydantic.alias_generators import to_camel

class CustomModel(BaseModel):
    """Base model for all models in the application."""

    model_config = ConfigDict(
        from_attributes=True,
        populate_by_name=True,
        alias_generator=to_camel,
        coerce_numbers_to_str=True
    )
    
DataT = TypeVar("DataT")

class CustomResponse(CustomModel, Generic[DataT]):
    """Custom response model for the API."""

    status: str = Field(..., examples=["1", "-1"])
    message: str = Field(..., examples=["Message", "User already exists"])
    data: DataT | None = None