# 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_combined_basic_info import TalentCombinedBasicInfo
from .talent_combined_education_info import TalentCombinedEducationInfo
from .talent_combined_career_info import TalentCombinedCareerInfo
from .talent_combined_project_info import TalentCombinedProjectInfo
from .talent_combined_work_info import TalentCombinedWorkInfo
from .talent_combined_award_info import TalentCombinedAwardInfo
from .talent_combined_language_info import TalentCombinedLanguageInfo
from .talent_combined_sns_info import TalentCombinedSnsInfo
from .talent_self_evaluation import TalentSelfEvaluation
from .talent_customized_data_object_value import TalentCustomizedDataObjectValue


class CombinedCreateTalentRequestBody(object):
    _types = {
        "init_source_id": str,
        "resume_source_id": str,
        "folder_id_list": List[str],
        "creator_id": str,
        "creator_account_type": int,
        "resume_attachment_id": str,
        "basic_info": TalentCombinedBasicInfo,
        "education_list": List[TalentCombinedEducationInfo],
        "career_list": List[TalentCombinedCareerInfo],
        "project_list": List[TalentCombinedProjectInfo],
        "works_list": List[TalentCombinedWorkInfo],
        "award_list": List[TalentCombinedAwardInfo],
        "language_list": List[TalentCombinedLanguageInfo],
        "sns_list": List[TalentCombinedSnsInfo],
        "preferred_city_code_list": List[str],
        "self_evaluation": TalentSelfEvaluation,
        "customized_data": List[TalentCustomizedDataObjectValue],
    }

    def __init__(self, d=None):
        self.init_source_id: Optional[str] = None
        self.resume_source_id: Optional[str] = None
        self.folder_id_list: Optional[List[str]] = None
        self.creator_id: Optional[str] = None
        self.creator_account_type: Optional[int] = None
        self.resume_attachment_id: Optional[str] = None
        self.basic_info: Optional[TalentCombinedBasicInfo] = None
        self.education_list: Optional[List[TalentCombinedEducationInfo]] = None
        self.career_list: Optional[List[TalentCombinedCareerInfo]] = None
        self.project_list: Optional[List[TalentCombinedProjectInfo]] = None
        self.works_list: Optional[List[TalentCombinedWorkInfo]] = None
        self.award_list: Optional[List[TalentCombinedAwardInfo]] = None
        self.language_list: Optional[List[TalentCombinedLanguageInfo]] = None
        self.sns_list: Optional[List[TalentCombinedSnsInfo]] = None
        self.preferred_city_code_list: Optional[List[str]] = None
        self.self_evaluation: Optional[TalentSelfEvaluation] = None
        self.customized_data: Optional[List[TalentCustomizedDataObjectValue]] = None
        init(self, d, self._types)

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


class CombinedCreateTalentRequestBodyBuilder(object):
    def __init__(self) -> None:
        self._combined_create_talent_request_body = CombinedCreateTalentRequestBody()

    def init_source_id(self, init_source_id: str) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.init_source_id = init_source_id
        return self

    def resume_source_id(self, resume_source_id: str) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.resume_source_id = resume_source_id
        return self

    def folder_id_list(self, folder_id_list: List[str]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.folder_id_list = folder_id_list
        return self

    def creator_id(self, creator_id: str) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.creator_id = creator_id
        return self

    def creator_account_type(self, creator_account_type: int) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.creator_account_type = creator_account_type
        return self

    def resume_attachment_id(self, resume_attachment_id: str) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.resume_attachment_id = resume_attachment_id
        return self

    def basic_info(self, basic_info: TalentCombinedBasicInfo) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.basic_info = basic_info
        return self

    def education_list(self,
                       education_list: List[TalentCombinedEducationInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.education_list = education_list
        return self

    def career_list(self, career_list: List[TalentCombinedCareerInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.career_list = career_list
        return self

    def project_list(self, project_list: List[TalentCombinedProjectInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.project_list = project_list
        return self

    def works_list(self, works_list: List[TalentCombinedWorkInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.works_list = works_list
        return self

    def award_list(self, award_list: List[TalentCombinedAwardInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.award_list = award_list
        return self

    def language_list(self,
                      language_list: List[TalentCombinedLanguageInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.language_list = language_list
        return self

    def sns_list(self, sns_list: List[TalentCombinedSnsInfo]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.sns_list = sns_list
        return self

    def preferred_city_code_list(self, preferred_city_code_list: List[str]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.preferred_city_code_list = preferred_city_code_list
        return self

    def self_evaluation(self, self_evaluation: TalentSelfEvaluation) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.self_evaluation = self_evaluation
        return self

    def customized_data(self, customized_data: List[
        TalentCustomizedDataObjectValue]) -> "CombinedCreateTalentRequestBodyBuilder":
        self._combined_create_talent_request_body.customized_data = customized_data
        return self

    def build(self) -> "CombinedCreateTalentRequestBody":
        return self._combined_create_talent_request_body
