# 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 .i18n import I18n
from .social_archive_item import SocialArchiveItem


class SocialArchiveDetail(object):
    _types = {
        "description": I18n,
        "insurance_type": str,
        "insurance_status": str,
        "id": str,
        "tid": str,
        "plan_id": str,
        "plan_tid": str,
        "location_id": str,
        "company_id": str,
        "account_type": str,
        "insurance_account": str,
        "base_salary": str,
        "insurance_details": List[SocialArchiveItem],
        "effective_date": str,
    }

    def __init__(self, d=None):
        self.description: Optional[I18n] = None
        self.insurance_type: Optional[str] = None
        self.insurance_status: Optional[str] = None
        self.id: Optional[str] = None
        self.tid: Optional[str] = None
        self.plan_id: Optional[str] = None
        self.plan_tid: Optional[str] = None
        self.location_id: Optional[str] = None
        self.company_id: Optional[str] = None
        self.account_type: Optional[str] = None
        self.insurance_account: Optional[str] = None
        self.base_salary: Optional[str] = None
        self.insurance_details: Optional[List[SocialArchiveItem]] = None
        self.effective_date: Optional[str] = None
        init(self, d, self._types)

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


class SocialArchiveDetailBuilder(object):
    def __init__(self) -> None:
        self._social_archive_detail = SocialArchiveDetail()

    def description(self, description: I18n) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.description = description
        return self

    def insurance_type(self, insurance_type: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.insurance_type = insurance_type
        return self

    def insurance_status(self, insurance_status: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.insurance_status = insurance_status
        return self

    def id(self, id: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.id = id
        return self

    def tid(self, tid: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.tid = tid
        return self

    def plan_id(self, plan_id: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.plan_id = plan_id
        return self

    def plan_tid(self, plan_tid: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.plan_tid = plan_tid
        return self

    def location_id(self, location_id: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.location_id = location_id
        return self

    def company_id(self, company_id: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.company_id = company_id
        return self

    def account_type(self, account_type: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.account_type = account_type
        return self

    def insurance_account(self, insurance_account: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.insurance_account = insurance_account
        return self

    def base_salary(self, base_salary: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.base_salary = base_salary
        return self

    def insurance_details(self, insurance_details: List[SocialArchiveItem]) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.insurance_details = insurance_details
        return self

    def effective_date(self, effective_date: str) -> "SocialArchiveDetailBuilder":
        self._social_archive_detail.effective_date = effective_date
        return self

    def build(self) -> "SocialArchiveDetail":
        return self._social_archive_detail
