# 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 .application_offer_basic_info import ApplicationOfferBasicInfo
from .application_offer_salary_plan import ApplicationOfferSalaryPlan
from .offer_job_info import OfferJobInfo
from .application_offer_custom_module import ApplicationOfferCustomModule
from .offer_send_record import OfferSendRecord


class ApplicationOffer(object):
    _types = {
        "id": str,
        "application_id": str,
        "basic_info": ApplicationOfferBasicInfo,
        "salary_plan": ApplicationOfferSalaryPlan,
        "schema_id": str,
        "offer_status": int,
        "job_info": OfferJobInfo,
        "customized_module_list": List[ApplicationOfferCustomModule],
        "job_requirement_id": str,
        "offer_send_record_list": List[OfferSendRecord],
    }

    def __init__(self, d=None):
        self.id: Optional[str] = None
        self.application_id: Optional[str] = None
        self.basic_info: Optional[ApplicationOfferBasicInfo] = None
        self.salary_plan: Optional[ApplicationOfferSalaryPlan] = None
        self.schema_id: Optional[str] = None
        self.offer_status: Optional[int] = None
        self.job_info: Optional[OfferJobInfo] = None
        self.customized_module_list: Optional[List[ApplicationOfferCustomModule]] = None
        self.job_requirement_id: Optional[str] = None
        self.offer_send_record_list: Optional[List[OfferSendRecord]] = None
        init(self, d, self._types)

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


class ApplicationOfferBuilder(object):
    def __init__(self) -> None:
        self._application_offer = ApplicationOffer()

    def id(self, id: str) -> "ApplicationOfferBuilder":
        self._application_offer.id = id
        return self

    def application_id(self, application_id: str) -> "ApplicationOfferBuilder":
        self._application_offer.application_id = application_id
        return self

    def basic_info(self, basic_info: ApplicationOfferBasicInfo) -> "ApplicationOfferBuilder":
        self._application_offer.basic_info = basic_info
        return self

    def salary_plan(self, salary_plan: ApplicationOfferSalaryPlan) -> "ApplicationOfferBuilder":
        self._application_offer.salary_plan = salary_plan
        return self

    def schema_id(self, schema_id: str) -> "ApplicationOfferBuilder":
        self._application_offer.schema_id = schema_id
        return self

    def offer_status(self, offer_status: int) -> "ApplicationOfferBuilder":
        self._application_offer.offer_status = offer_status
        return self

    def job_info(self, job_info: OfferJobInfo) -> "ApplicationOfferBuilder":
        self._application_offer.job_info = job_info
        return self

    def customized_module_list(self,
                               customized_module_list: List[ApplicationOfferCustomModule]) -> "ApplicationOfferBuilder":
        self._application_offer.customized_module_list = customized_module_list
        return self

    def job_requirement_id(self, job_requirement_id: str) -> "ApplicationOfferBuilder":
        self._application_offer.job_requirement_id = job_requirement_id
        return self

    def offer_send_record_list(self, offer_send_record_list: List[OfferSendRecord]) -> "ApplicationOfferBuilder":
        self._application_offer.offer_send_record_list = offer_send_record_list
        return self

    def build(self) -> "ApplicationOffer":
        return self._application_offer
