# 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 .talent_basic_info import TalentBasicInfo
from .talent_education_info import TalentEducationInfo
from .talent_career_info import TalentCareerInfo
from .talent_project_info import TalentProjectInfo
from .talent_works_info import TalentWorksInfo
from .talent_award_info import TalentAwardInfo
from .talent_language_info import TalentLanguageInfo
from .talent_sns_info import TalentSnsInfo
from .talent_resume_source import TalentResumeSource
from .talent_interview_registration_simple import TalentInterviewRegistrationSimple
from .registration_basic_info import RegistrationBasicInfo
from .talent_customized_data import TalentCustomizedData


class Talent(object):
    _types = {
        "id": str,
        "is_in_agency_period": bool,
        "is_onboarded": bool,
        "basic_info": TalentBasicInfo,
        "education_list": List[TalentEducationInfo],
        "career_list": List[TalentCareerInfo],
        "project_list": List[TalentProjectInfo],
        "works_list": List[TalentWorksInfo],
        "award_list": List[TalentAwardInfo],
        "language_list": List[TalentLanguageInfo],
        "sns_list": List[TalentSnsInfo],
        "resume_source_list": List[TalentResumeSource],
        "interview_registration_list": List[TalentInterviewRegistrationSimple],
        "registration_list": List[RegistrationBasicInfo],
        "resume_attachment_id_list": List[str],
        "customized_data_list": List[TalentCustomizedData],
        "top_degree": int,
        "first_degree": int,
    }

    def __init__(self, d=None):
        self.id: Optional[str] = None
        self.is_in_agency_period: Optional[bool] = None
        self.is_onboarded: Optional[bool] = None
        self.basic_info: Optional[TalentBasicInfo] = None
        self.education_list: Optional[List[TalentEducationInfo]] = None
        self.career_list: Optional[List[TalentCareerInfo]] = None
        self.project_list: Optional[List[TalentProjectInfo]] = None
        self.works_list: Optional[List[TalentWorksInfo]] = None
        self.award_list: Optional[List[TalentAwardInfo]] = None
        self.language_list: Optional[List[TalentLanguageInfo]] = None
        self.sns_list: Optional[List[TalentSnsInfo]] = None
        self.resume_source_list: Optional[List[TalentResumeSource]] = None
        self.interview_registration_list: Optional[List[TalentInterviewRegistrationSimple]] = None
        self.registration_list: Optional[List[RegistrationBasicInfo]] = None
        self.resume_attachment_id_list: Optional[List[str]] = None
        self.customized_data_list: Optional[List[TalentCustomizedData]] = None
        self.top_degree: Optional[int] = None
        self.first_degree: Optional[int] = None
        init(self, d, self._types)

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


class TalentBuilder(object):
    def __init__(self) -> None:
        self._talent = Talent()

    def id(self, id: str) -> "TalentBuilder":
        self._talent.id = id
        return self

    def is_in_agency_period(self, is_in_agency_period: bool) -> "TalentBuilder":
        self._talent.is_in_agency_period = is_in_agency_period
        return self

    def is_onboarded(self, is_onboarded: bool) -> "TalentBuilder":
        self._talent.is_onboarded = is_onboarded
        return self

    def basic_info(self, basic_info: TalentBasicInfo) -> "TalentBuilder":
        self._talent.basic_info = basic_info
        return self

    def education_list(self, education_list: List[TalentEducationInfo]) -> "TalentBuilder":
        self._talent.education_list = education_list
        return self

    def career_list(self, career_list: List[TalentCareerInfo]) -> "TalentBuilder":
        self._talent.career_list = career_list
        return self

    def project_list(self, project_list: List[TalentProjectInfo]) -> "TalentBuilder":
        self._talent.project_list = project_list
        return self

    def works_list(self, works_list: List[TalentWorksInfo]) -> "TalentBuilder":
        self._talent.works_list = works_list
        return self

    def award_list(self, award_list: List[TalentAwardInfo]) -> "TalentBuilder":
        self._talent.award_list = award_list
        return self

    def language_list(self, language_list: List[TalentLanguageInfo]) -> "TalentBuilder":
        self._talent.language_list = language_list
        return self

    def sns_list(self, sns_list: List[TalentSnsInfo]) -> "TalentBuilder":
        self._talent.sns_list = sns_list
        return self

    def resume_source_list(self, resume_source_list: List[TalentResumeSource]) -> "TalentBuilder":
        self._talent.resume_source_list = resume_source_list
        return self

    def interview_registration_list(self, interview_registration_list: List[
        TalentInterviewRegistrationSimple]) -> "TalentBuilder":
        self._talent.interview_registration_list = interview_registration_list
        return self

    def registration_list(self, registration_list: List[RegistrationBasicInfo]) -> "TalentBuilder":
        self._talent.registration_list = registration_list
        return self

    def resume_attachment_id_list(self, resume_attachment_id_list: List[str]) -> "TalentBuilder":
        self._talent.resume_attachment_id_list = resume_attachment_id_list
        return self

    def customized_data_list(self, customized_data_list: List[TalentCustomizedData]) -> "TalentBuilder":
        self._talent.customized_data_list = customized_data_list
        return self

    def top_degree(self, top_degree: int) -> "TalentBuilder":
        self._talent.top_degree = top_degree
        return self

    def first_degree(self, first_degree: int) -> "TalentBuilder":
        self._talent.first_degree = first_degree
        return self

    def build(self) -> "Talent":
        return self._talent
