# 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 .id_name_object import IdNameObject
from .id_name_object import IdNameObject
from .id_name_object import IdNameObject
from .id_name_object import IdNameObject
from .job_config_interview_round import JobConfigInterviewRound
from .registration_info import RegistrationInfo
from .registration_info import RegistrationInfo
from .job_config_round_type_result import JobConfigRoundTypeResult
from .id_name_object import IdNameObject
from .interview_appointment_config import InterviewAppointmentConfig
from .id_name_object import IdNameObject


class JobConfigDetail(object):
    _types = {
        "offer_apply_schema": IdNameObject,
        "offer_process_conf": IdNameObject,
        "recommended_evaluator_list": List[IdNameObject],
        "assessment_template": IdNameObject,
        "id": str,
        "interview_round_list": List[JobConfigInterviewRound],
        "interview_registration": RegistrationInfo,
        "onboard_registration": RegistrationInfo,
        "interview_round_type_list": List[JobConfigRoundTypeResult],
        "related_job_list": List[IdNameObject],
        "job_attribute": int,
        "interview_appointment_config": InterviewAppointmentConfig,
        "internship_offer_apply_schema": IdNameObject,
    }

    def __init__(self, d=None):
        self.offer_apply_schema: Optional[IdNameObject] = None
        self.offer_process_conf: Optional[IdNameObject] = None
        self.recommended_evaluator_list: Optional[List[IdNameObject]] = None
        self.assessment_template: Optional[IdNameObject] = None
        self.id: Optional[str] = None
        self.interview_round_list: Optional[List[JobConfigInterviewRound]] = None
        self.interview_registration: Optional[RegistrationInfo] = None
        self.onboard_registration: Optional[RegistrationInfo] = None
        self.interview_round_type_list: Optional[List[JobConfigRoundTypeResult]] = None
        self.related_job_list: Optional[List[IdNameObject]] = None
        self.job_attribute: Optional[int] = None
        self.interview_appointment_config: Optional[InterviewAppointmentConfig] = None
        self.internship_offer_apply_schema: Optional[IdNameObject] = None
        init(self, d, self._types)

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


class JobConfigDetailBuilder(object):
    def __init__(self) -> None:
        self._job_config_detail = JobConfigDetail()

    def offer_apply_schema(self, offer_apply_schema: IdNameObject) -> "JobConfigDetailBuilder":
        self._job_config_detail.offer_apply_schema = offer_apply_schema
        return self

    def offer_process_conf(self, offer_process_conf: IdNameObject) -> "JobConfigDetailBuilder":
        self._job_config_detail.offer_process_conf = offer_process_conf
        return self

    def recommended_evaluator_list(self, recommended_evaluator_list: List[IdNameObject]) -> "JobConfigDetailBuilder":
        self._job_config_detail.recommended_evaluator_list = recommended_evaluator_list
        return self

    def assessment_template(self, assessment_template: IdNameObject) -> "JobConfigDetailBuilder":
        self._job_config_detail.assessment_template = assessment_template
        return self

    def id(self, id: str) -> "JobConfigDetailBuilder":
        self._job_config_detail.id = id
        return self

    def interview_round_list(self, interview_round_list: List[JobConfigInterviewRound]) -> "JobConfigDetailBuilder":
        self._job_config_detail.interview_round_list = interview_round_list
        return self

    def interview_registration(self, interview_registration: RegistrationInfo) -> "JobConfigDetailBuilder":
        self._job_config_detail.interview_registration = interview_registration
        return self

    def onboard_registration(self, onboard_registration: RegistrationInfo) -> "JobConfigDetailBuilder":
        self._job_config_detail.onboard_registration = onboard_registration
        return self

    def interview_round_type_list(self, interview_round_type_list: List[
        JobConfigRoundTypeResult]) -> "JobConfigDetailBuilder":
        self._job_config_detail.interview_round_type_list = interview_round_type_list
        return self

    def related_job_list(self, related_job_list: List[IdNameObject]) -> "JobConfigDetailBuilder":
        self._job_config_detail.related_job_list = related_job_list
        return self

    def job_attribute(self, job_attribute: int) -> "JobConfigDetailBuilder":
        self._job_config_detail.job_attribute = job_attribute
        return self

    def interview_appointment_config(self,
                                     interview_appointment_config: InterviewAppointmentConfig) -> "JobConfigDetailBuilder":
        self._job_config_detail.interview_appointment_config = interview_appointment_config
        return self

    def internship_offer_apply_schema(self, internship_offer_apply_schema: IdNameObject) -> "JobConfigDetailBuilder":
        self._job_config_detail.internship_offer_apply_schema = internship_offer_apply_schema
        return self

    def build(self) -> "JobConfigDetail":
        return self._job_config_detail
