# 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 .composite_talent_basic_info import CompositeTalentBasicInfo
from .composite_talent_education_info import CompositeTalentEducationInfo
from .composite_talent_career_info import CompositeTalentCareerInfo
from .composite_talent_project_info import CompositeTalentProjectInfo
from .composite_talent_works_info import CompositeTalentWorksInfo
from .composite_talent_award_info import CompositeTalentAwardInfo
from .composite_talent_language_info import CompositeTalentLanguageInfo
from .composite_talent_sns_info import CompositeTalentSnsInfo
from .talent_resume_source import TalentResumeSource
from .composite_talent_internship_info import CompositeTalentInternshipInfo
from .composite_talent_customized_data import CompositeTalentCustomizedData
from .talent_resume_attachment import TalentResumeAttachment
from .talent_interview_registration_simple import TalentInterviewRegistrationSimple
from .registration_basic_info import RegistrationBasicInfo
from .talent_folder import TalentFolder
from .talent_tag import TalentTag
from .talent_similar import TalentSimilar
from .talent_block import TalentBlock
from .talent_pool import TalentPool
from .talent_note import TalentNote


class CompositeTalent(object):
    _types = {
        "talent_id": str,
        "basic_info": CompositeTalentBasicInfo,
        "education_list": List[CompositeTalentEducationInfo],
        "career_list": List[CompositeTalentCareerInfo],
        "project_list": List[CompositeTalentProjectInfo],
        "works_list": List[CompositeTalentWorksInfo],
        "award_list": List[CompositeTalentAwardInfo],
        "language_list": List[CompositeTalentLanguageInfo],
        "sns_list": List[CompositeTalentSnsInfo],
        "resume_source_list": List[TalentResumeSource],
        "internship_list": List[CompositeTalentInternshipInfo],
        "customized_data_list": List[CompositeTalentCustomizedData],
        "resume_attachment_id_list": List[str],
        "resume_attachment_list": List[TalentResumeAttachment],
        "interview_registration_list": List[TalentInterviewRegistrationSimple],
        "registration_list": List[RegistrationBasicInfo],
        "is_onboarded": bool,
        "is_in_agency_period": bool,
        "top_degree": int,
        "talent_pool_id_list": List[str],
        "talent_folder_ref_list_v2": List[TalentFolder],
        "tag_list": List[TalentTag],
        "similar_info_v2": TalentSimilar,
        "block_info": TalentBlock,
        "talent_pool_ref_list_v2": List[TalentPool],
        "note_list_v2": List[TalentNote],
    }

    def __init__(self, d=None):
        self.talent_id: Optional[str] = None
        self.basic_info: Optional[CompositeTalentBasicInfo] = None
        self.education_list: Optional[List[CompositeTalentEducationInfo]] = None
        self.career_list: Optional[List[CompositeTalentCareerInfo]] = None
        self.project_list: Optional[List[CompositeTalentProjectInfo]] = None
        self.works_list: Optional[List[CompositeTalentWorksInfo]] = None
        self.award_list: Optional[List[CompositeTalentAwardInfo]] = None
        self.language_list: Optional[List[CompositeTalentLanguageInfo]] = None
        self.sns_list: Optional[List[CompositeTalentSnsInfo]] = None
        self.resume_source_list: Optional[List[TalentResumeSource]] = None
        self.internship_list: Optional[List[CompositeTalentInternshipInfo]] = None
        self.customized_data_list: Optional[List[CompositeTalentCustomizedData]] = None
        self.resume_attachment_id_list: Optional[List[str]] = None
        self.resume_attachment_list: Optional[List[TalentResumeAttachment]] = None
        self.interview_registration_list: Optional[List[TalentInterviewRegistrationSimple]] = None
        self.registration_list: Optional[List[RegistrationBasicInfo]] = None
        self.is_onboarded: Optional[bool] = None
        self.is_in_agency_period: Optional[bool] = None
        self.top_degree: Optional[int] = None
        self.talent_pool_id_list: Optional[List[str]] = None
        self.talent_folder_ref_list_v2: Optional[List[TalentFolder]] = None
        self.tag_list: Optional[List[TalentTag]] = None
        self.similar_info_v2: Optional[TalentSimilar] = None
        self.block_info: Optional[TalentBlock] = None
        self.talent_pool_ref_list_v2: Optional[List[TalentPool]] = None
        self.note_list_v2: Optional[List[TalentNote]] = None
        init(self, d, self._types)

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


class CompositeTalentBuilder(object):
    def __init__(self) -> None:
        self._composite_talent = CompositeTalent()

    def talent_id(self, talent_id: str) -> "CompositeTalentBuilder":
        self._composite_talent.talent_id = talent_id
        return self

    def basic_info(self, basic_info: CompositeTalentBasicInfo) -> "CompositeTalentBuilder":
        self._composite_talent.basic_info = basic_info
        return self

    def education_list(self, education_list: List[CompositeTalentEducationInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.education_list = education_list
        return self

    def career_list(self, career_list: List[CompositeTalentCareerInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.career_list = career_list
        return self

    def project_list(self, project_list: List[CompositeTalentProjectInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.project_list = project_list
        return self

    def works_list(self, works_list: List[CompositeTalentWorksInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.works_list = works_list
        return self

    def award_list(self, award_list: List[CompositeTalentAwardInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.award_list = award_list
        return self

    def language_list(self, language_list: List[CompositeTalentLanguageInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.language_list = language_list
        return self

    def sns_list(self, sns_list: List[CompositeTalentSnsInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.sns_list = sns_list
        return self

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

    def internship_list(self, internship_list: List[CompositeTalentInternshipInfo]) -> "CompositeTalentBuilder":
        self._composite_talent.internship_list = internship_list
        return self

    def customized_data_list(self,
                             customized_data_list: List[CompositeTalentCustomizedData]) -> "CompositeTalentBuilder":
        self._composite_talent.customized_data_list = customized_data_list
        return self

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

    def resume_attachment_list(self, resume_attachment_list: List[TalentResumeAttachment]) -> "CompositeTalentBuilder":
        self._composite_talent.resume_attachment_list = resume_attachment_list
        return self

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

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

    def is_onboarded(self, is_onboarded: bool) -> "CompositeTalentBuilder":
        self._composite_talent.is_onboarded = is_onboarded
        return self

    def is_in_agency_period(self, is_in_agency_period: bool) -> "CompositeTalentBuilder":
        self._composite_talent.is_in_agency_period = is_in_agency_period
        return self

    def top_degree(self, top_degree: int) -> "CompositeTalentBuilder":
        self._composite_talent.top_degree = top_degree
        return self

    def talent_pool_id_list(self, talent_pool_id_list: List[str]) -> "CompositeTalentBuilder":
        self._composite_talent.talent_pool_id_list = talent_pool_id_list
        return self

    def talent_folder_ref_list_v2(self, talent_folder_ref_list_v2: List[TalentFolder]) -> "CompositeTalentBuilder":
        self._composite_talent.talent_folder_ref_list_v2 = talent_folder_ref_list_v2
        return self

    def tag_list(self, tag_list: List[TalentTag]) -> "CompositeTalentBuilder":
        self._composite_talent.tag_list = tag_list
        return self

    def similar_info_v2(self, similar_info_v2: TalentSimilar) -> "CompositeTalentBuilder":
        self._composite_talent.similar_info_v2 = similar_info_v2
        return self

    def block_info(self, block_info: TalentBlock) -> "CompositeTalentBuilder":
        self._composite_talent.block_info = block_info
        return self

    def talent_pool_ref_list_v2(self, talent_pool_ref_list_v2: List[TalentPool]) -> "CompositeTalentBuilder":
        self._composite_talent.talent_pool_ref_list_v2 = talent_pool_ref_list_v2
        return self

    def note_list_v2(self, note_list_v2: List[TalentNote]) -> "CompositeTalentBuilder":
        self._composite_talent.note_list_v2 = note_list_v2
        return self

    def build(self) -> "CompositeTalent":
        return self._composite_talent
