from pydantic import BaseModel, ConfigDict, Field
from fastapi import UploadFile
from typing import Optional, List
import json


class ParticipantInfoSchema(BaseModel):
    participant_id: int
    course_id: int
    age: Optional[int] = None
    programme_applying_for: Optional[str] = None


class BursaryClassFormDetailsSchema(BaseModel):
    id: Optional[int] = None
    bursary_class_id: Optional[int] = None
    participant_id: int
    course_id: int
    age: Optional[int] = None
    programme_applying_for: Optional[str] = None
    model_config = ConfigDict(from_attributes=True)


class BursaryClassBaseSchema(BaseModel):
    parent_id: int
    parent_primary_contact: str
    parent_secondary_contact: Optional[str] = None
    parent_email: Optional[str] = None


class BursaryClassCreateSchema(BursaryClassBaseSchema):
    file: Optional[UploadFile] = None
    participant_info: List[ParticipantInfoSchema]


class BursaryClassUpdateSchema(BursaryClassBaseSchema):
    id: int
    file: Optional[UploadFile] = None


class BursaryClassFormResponseSchema(BursaryClassBaseSchema):
    id: int
    file: Optional[str] = None
    participant_info: Optional[List[BursaryClassFormDetailsSchema]] = None
    model_config = ConfigDict(from_attributes=True)
