# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .resume_education import ResumeEducation
from .resume_career import ResumeCareer
from .resume_project import ResumeProject
from .resume_language import ResumeLanguage
from .resume_award import ResumeAward
from .resume_certificate import ResumeCertificate
from .resume_competition import ResumeCompetition


class Resume(object):
    _types = {
        "file_md5": str,
        "content": str,
        "new_content": str,
        "name": str,
        "email": str,
        "mobile": str,
        "mobile_is_virtual": bool,
        "country_code": str,
        "educations": List[ResumeEducation],
        "careers": List[ResumeCareer],
        "projects": List[ResumeProject],
        "work_year": int,
        "date_of_birth": str,
        "gender": int,
        "willing_positions": List[str],
        "current_location": str,
        "willing_locations": List[str],
        "home_location": str,
        "languages": List[ResumeLanguage],
        "awards": List[ResumeAward],
        "certificates": List[ResumeCertificate],
        "competitions": List[ResumeCompetition],
        "self_evaluation": str,
        "urls": List[str],
        "social_links": List[str],
    }

    def __init__(self, d=None):
        self.file_md5: Optional[str] = None
        self.content: Optional[str] = None
        self.new_content: Optional[str] = None
        self.name: Optional[str] = None
        self.email: Optional[str] = None
        self.mobile: Optional[str] = None
        self.mobile_is_virtual: Optional[bool] = None
        self.country_code: Optional[str] = None
        self.educations: Optional[List[ResumeEducation]] = None
        self.careers: Optional[List[ResumeCareer]] = None
        self.projects: Optional[List[ResumeProject]] = None
        self.work_year: Optional[int] = None
        self.date_of_birth: Optional[str] = None
        self.gender: Optional[int] = None
        self.willing_positions: Optional[List[str]] = None
        self.current_location: Optional[str] = None
        self.willing_locations: Optional[List[str]] = None
        self.home_location: Optional[str] = None
        self.languages: Optional[List[ResumeLanguage]] = None
        self.awards: Optional[List[ResumeAward]] = None
        self.certificates: Optional[List[ResumeCertificate]] = None
        self.competitions: Optional[List[ResumeCompetition]] = None
        self.self_evaluation: Optional[str] = None
        self.urls: Optional[List[str]] = None
        self.social_links: Optional[List[str]] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "ResumeBuilder":
        return ResumeBuilder()


class ResumeBuilder(object):
    def __init__(self) -> None:
        self._resume = Resume()

    def file_md5(self, file_md5: str) -> "ResumeBuilder":
        self._resume.file_md5 = file_md5
        return self

    def content(self, content: str) -> "ResumeBuilder":
        self._resume.content = content
        return self

    def new_content(self, new_content: str) -> "ResumeBuilder":
        self._resume.new_content = new_content
        return self

    def name(self, name: str) -> "ResumeBuilder":
        self._resume.name = name
        return self

    def email(self, email: str) -> "ResumeBuilder":
        self._resume.email = email
        return self

    def mobile(self, mobile: str) -> "ResumeBuilder":
        self._resume.mobile = mobile
        return self

    def mobile_is_virtual(self, mobile_is_virtual: bool) -> "ResumeBuilder":
        self._resume.mobile_is_virtual = mobile_is_virtual
        return self

    def country_code(self, country_code: str) -> "ResumeBuilder":
        self._resume.country_code = country_code
        return self

    def educations(self, educations: List[ResumeEducation]) -> "ResumeBuilder":
        self._resume.educations = educations
        return self

    def careers(self, careers: List[ResumeCareer]) -> "ResumeBuilder":
        self._resume.careers = careers
        return self

    def projects(self, projects: List[ResumeProject]) -> "ResumeBuilder":
        self._resume.projects = projects
        return self

    def work_year(self, work_year: int) -> "ResumeBuilder":
        self._resume.work_year = work_year
        return self

    def date_of_birth(self, date_of_birth: str) -> "ResumeBuilder":
        self._resume.date_of_birth = date_of_birth
        return self

    def gender(self, gender: int) -> "ResumeBuilder":
        self._resume.gender = gender
        return self

    def willing_positions(self, willing_positions: List[str]) -> "ResumeBuilder":
        self._resume.willing_positions = willing_positions
        return self

    def current_location(self, current_location: str) -> "ResumeBuilder":
        self._resume.current_location = current_location
        return self

    def willing_locations(self, willing_locations: List[str]) -> "ResumeBuilder":
        self._resume.willing_locations = willing_locations
        return self

    def home_location(self, home_location: str) -> "ResumeBuilder":
        self._resume.home_location = home_location
        return self

    def languages(self, languages: List[ResumeLanguage]) -> "ResumeBuilder":
        self._resume.languages = languages
        return self

    def awards(self, awards: List[ResumeAward]) -> "ResumeBuilder":
        self._resume.awards = awards
        return self

    def certificates(self, certificates: List[ResumeCertificate]) -> "ResumeBuilder":
        self._resume.certificates = certificates
        return self

    def competitions(self, competitions: List[ResumeCompetition]) -> "ResumeBuilder":
        self._resume.competitions = competitions
        return self

    def self_evaluation(self, self_evaluation: str) -> "ResumeBuilder":
        self._resume.self_evaluation = self_evaluation
        return self

    def urls(self, urls: List[str]) -> "ResumeBuilder":
        self._resume.urls = urls
        return self

    def social_links(self, social_links: List[str]) -> "ResumeBuilder":
        self._resume.social_links = social_links
        return self

    def build(self) -> "Resume":
        return self._resume
