from pydantic import Field
from ensysmod.schemas.base_schema import MAX_STR_LENGTH, MIN_STR_LENGTH, BaseSchema, CreateSchema, ReturnSchema, UpdateSchema
from ensysmod.schemas.dataset import DatasetSchema
class RegionBase(BaseSchema):
    """
    Shared attributes for a region. Used as a base class for all schemas.
    """
    name: str = Field(
        default=...,
        description="Unique name of the region.",
        examples=["germany"],
        min_length=MIN_STR_LENGTH,
        max_length=MAX_STR_LENGTH,
    )
[docs]
class RegionCreate(RegionBase, CreateSchema):
    """
    Attributes to receive via API on creation of a region.
    """
    ref_dataset: int = Field(
        default=...,
        description="ID of the dataset to use as reference.",
        examples=[1],
        gt=0,
    ) 
class RegionUpdate(RegionBase, UpdateSchema):
    """
    Attributes to receive via API on update of a region.
    """
    name: str | None = Field(
        default=None,
        description="Unique name of the region.",
        examples=["germany"],
        min_length=MIN_STR_LENGTH,
        max_length=MAX_STR_LENGTH,
    )
class RegionSchema(RegionBase, ReturnSchema):
    """
    Attributes to return via API for a region.
    """
    id: int
    dataset: DatasetSchema