# generated by datamodel-codegen:
#   filename:  resume.json
#   timestamp: 2025-02-09T20:28:24+00:00

from __future__ import annotations

from typing import Optional

from pendulum import Date
from pydantic import AnyUrl, BaseModel, EmailStr, Field


class Location(BaseModel):
    address: Optional[str] = None
    postal_code: Optional[str] = Field(None, alias="postalCode")
    city: Optional[str] = None
    country_code: Optional[str] = Field(None, alias="countryCode")
    region: Optional[str] = None


class Profile(BaseModel):
    network: Optional[str] = None
    username: Optional[str] = None
    url: Optional[AnyUrl] = None


class Basics(BaseModel):
    name: Optional[str] = None
    label: Optional[str] = None
    image: Optional[AnyUrl] = None
    email: Optional[EmailStr] = None
    phone: Optional[str] = None
    url: Optional[AnyUrl] = None
    summary: Optional[str] = None
    location: Optional[Location] = None
    profiles: Optional[list[Profile]] = None


class ExperienceItem(BaseModel):
    name: Optional[str] = None
    position: Optional[str] = None
    url: Optional[AnyUrl] = None
    start_date: Optional[Date] = Field(None, alias="startDate")
    end_date: Optional[Date] = Field(None, alias="endDate")
    summary: Optional[str] = None
    highlights: Optional[list[str]] = None


class VolunteerItem(BaseModel):
    organization: Optional[str] = None
    position: Optional[str] = None
    url: Optional[AnyUrl] = None
    start_date: Optional[Date] = Field(None, alias="startDate")
    end_date: Optional[Date] = Field(None, alias="endDate")
    summary: Optional[str] = None
    highlights: Optional[list[str]] = None


class EducationItem(BaseModel):
    institution: Optional[str] = None
    url: Optional[AnyUrl] = None
    area: Optional[str] = None
    study_type: Optional[str] = Field(None, alias="studyType")
    start_date: Optional[Date] = Field(None, alias="startDate")
    end_date: Optional[Date] = Field(None, alias="endDate")
    score: Optional[str] = None
    courses: Optional[list[str]] = None


class Award(BaseModel):
    title: Optional[str] = None
    date: Optional[Date] = None
    awarder: Optional[str] = None
    summary: Optional[str] = None


class Certificate(BaseModel):
    name: Optional[str] = None
    date: Optional[Date] = None
    issuer: Optional[str] = None
    url: Optional[AnyUrl] = None


class Publication(BaseModel):
    name: Optional[str] = None
    publisher: Optional[str] = None
    release_date: Optional[Date] = Field(None, alias="releaseDate")
    url: Optional[AnyUrl] = None
    summary: Optional[str] = None


class Skill(BaseModel):
    name: Optional[str] = None
    level: Optional[str] = None
    keywords: Optional[list[str]] = None


class Language(BaseModel):
    language: Optional[str] = None
    fluency: Optional[str] = None


class Interest(BaseModel):
    name: Optional[str] = None
    keywords: Optional[list[str]] = None


class Reference(BaseModel):
    name: Optional[str] = None
    reference: Optional[str] = None


class Project(BaseModel):
    name: Optional[str] = None
    start_date: Optional[Date] = Field(None, alias="startDate")
    end_date: Optional[Date] = Field(None, alias="endDate")
    description: Optional[str] = None
    highlights: Optional[list[str]] = None
    url: Optional[AnyUrl] = None


class Resume(BaseModel):
    basics: Optional[Basics] = None
    experience: Optional[list[ExperienceItem]] = None
    volunteer: Optional[list[VolunteerItem]] = None
    education: Optional[list[EducationItem]] = None
    awards: Optional[list[Award]] = None
    certificates: Optional[list[Certificate]] = None
    publications: Optional[list[Publication]] = None
    skills: Optional[list[Skill]] = None
    languages: Optional[list[Language]] = None
    interests: Optional[list[Interest]] = None
    references: Optional[list[Reference]] = None
    projects: Optional[list[Project]] = None
