# from typing import Literal, Optional

# from pydantic import Field
# from app.utils.schemas_utils import CustomModel


# class CentralisedCreate(CustomModel):
    
#     group_id : Optional[int] = None
#     # distribution_type : str
#     about_warehouse : Optional[str] = None
#     warehouse_size : Optional[float] = None
#     expected_number_of_warehouse : Optional[int] = None
#     expected_number_of_warehouse_increase_every_year : Optional[int] = None
#     utilities_cost : Optional[float] = None
#     employee_cost_per_head : Optional[float] = None
#     rental_expenses : Optional[float] = None
#     transportation_cost : Optional[float] = None
#     number_of_employees : Optional[int] = None
#     # types : Optional[Literal["Putaway", "Flowthrough"]]
#     types : Optional[str] = None
#     centralised_additional_remark : Optional[str] = None
    
# class DirectCreate(CustomModel):
    
#     group_id : Optional[int] = None
#     # distribution_type : str
#     about_direct : Optional[str] = None
#     space_allotted_in_a_store : Optional[int] = None
#     employees_in_charge_at_store_level : Optional[int] = None
#     salary_of_each_employee : Optional[float] = None
#     unloading_policies : Optional[str] = None
#     checking_policies : Optional[str] = None
#     direct_aaditional_remarks : Optional[str] = None

# # class DirectCreate(CustomModel):
# #     group_id: int = Field(..., alias="groupId")
# #     distribution_type: str = Field(..., alias="distributionType")
# #     about_direct: Optional[str] = Field(None, alias="aboutDirect")
# #     space_allotted_in_a_store: Optional[int] = Field(None, alias="spaceAllottedInAStore")
# #     employees_in_charge_at_store_level: Optional[int] = Field(None, alias="employeesInChargeAtStoreLevel")
# #     salary_of_each_employee: Optional[float] = Field(None, alias="salaryOfEachEmployee")
# #     unloading_policies: Optional[str] = Field(None, alias="unloadingPolicies")
# #     checking_policies: Optional[str] = Field(None, alias="checkingPolicies")
# #     direct_aaditional_remarks: Optional[str] = Field(None, alias="directAdditionalRemarks")
    
# class DistributionCreate(CustomModel):
    
#     # centralised_direct_id : int
#     distribution_type : Literal["Centralised Warehouse Distribution", "Direct Store Delivery Distribution"]
#     # data : dict
#     centralised: CentralisedCreate
#     direct: DirectCreate
#     # group_id : int

from typing import Literal, Optional

from app.utils.schemas_utils import CustomModel


class CentralisedCreate(CustomModel):
    group_id : Optional[int] = None
    about_warehouse : Optional[str] = None
    warehouse_size : Optional[float] = None
    expected_number_of_warehouse : Optional[int] = None
    expected_number_of_warehouse_increase_every_year : Optional[int] = None
    utilities_cost : Optional[float] = None
    employee_cost_per_head : Optional[float] = None
    rental_expenses : Optional[float] = None
    transportation_cost : Optional[float] = None
    number_of_employees : Optional[int] = None
    types : Optional[str] = None
    centralised_additional_remark : Optional[str] = None

    # @validator("number_of_employees")
    # def validate_employee_limit(cls, v):
    #     if v is not None and v > 2:
    #         raise ValueError("Number of employees cannot exceed 2")
    #     return v


class DirectCreate(CustomModel):
    group_id : Optional[int] = None
    about_direct : Optional[str] = None
    space_allotted_in_a_store : Optional[int] = None
    employees_in_charge_at_store_level : Optional[int] = None
    salary_of_each_employee : Optional[float] = None
    unloading_policies : Optional[str] = None
    checking_policies : Optional[str] = None
    direct_aaditional_remarks : Optional[str] = None

    # @validator("employees_in_charge_at_store_level")
    # def validate_employee_limit(cls, v):
    #     if v is not None and v > 2:
    #         raise ValueError("Employees in charge at store level cannot exceed 2")
    #     return v


class DistributionCreate(CustomModel):
    distribution_type : Literal["Centralised Warehouse Distribution", "Direct Store Delivery Distribution"]
    centralised: Optional[CentralisedCreate] = None
    direct: Optional[DirectCreate] = None