from datetime import datetime
from typing import List, Literal, Optional
from pydantic import Field
from app.models.main.category import CategoryEnum
from app.utils.schemas_utils import CustomModel


class SimulationCreate(CustomModel):
    simulation_name: str
    description: str
    status: Literal["Active", "Pending", "Completed"] =  Field(default="Pending")
    start_date: datetime
    end_date: datetime
    category : Optional[List[int]] = None
    institution: str
    location: str
    members : int
    admin_id : int

class UserCreate(CustomModel):
    first_name: str
    last_name: str
    email_id: str
    mobile_number: int

class SuperAdminSimulation(CustomModel):
    institution: str
    members: int
    admin_id: int 
    user: Optional[UserCreate] = None

class SimulationResponse(CustomModel):
    simulation_id : int
    simulation_name: str
    description: str
    status: Literal["Active", "Pending", "Completed"] =  Field(default="Pending")
    start_date: Optional[datetime] = None
    end_date: datetime
    institution: str
    location: str
    simulation_code: str
    members : int
    
class GroupResponse(CustomModel):
    group_id: int 
    group_name: str
    group_email: str
    category_assigned: Optional[str] = None
    category : Optional[str] = None
    number_of_members: int
    simulation_code: str 
    group_code : str
    