# 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 .resigned_user_resouce_receiver import ResignedUserResouceReceiver
from .resurrect_employee_options import ResurrectEmployeeOptions
from .scenario import Scenario
from .migrate_geo_options import MigrateGeoOptions
from .operator import Operator


class UpdateEmployeeOptions(object):
    _types = {
        "enterprise_email_password": str,
        "resigned_user_resouce_receiver": ResignedUserResouceReceiver,
        "data_source": int,
        "resurrect_employee_options": ResurrectEmployeeOptions,
        "scenario": Scenario,
        "migrate_geo_options": MigrateGeoOptions,
        "operator": Operator,
    }

    def __init__(self, d=None):
        self.enterprise_email_password: Optional[str] = None
        self.resigned_user_resouce_receiver: Optional[ResignedUserResouceReceiver] = None
        self.data_source: Optional[int] = None
        self.resurrect_employee_options: Optional[ResurrectEmployeeOptions] = None
        self.scenario: Optional[Scenario] = None
        self.migrate_geo_options: Optional[MigrateGeoOptions] = None
        self.operator: Optional[Operator] = None
        init(self, d, self._types)

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


class UpdateEmployeeOptionsBuilder(object):
    def __init__(self) -> None:
        self._update_employee_options = UpdateEmployeeOptions()

    def enterprise_email_password(self, enterprise_email_password: str) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.enterprise_email_password = enterprise_email_password
        return self

    def resigned_user_resouce_receiver(self,
                                       resigned_user_resouce_receiver: ResignedUserResouceReceiver) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.resigned_user_resouce_receiver = resigned_user_resouce_receiver
        return self

    def data_source(self, data_source: int) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.data_source = data_source
        return self

    def resurrect_employee_options(self,
                                   resurrect_employee_options: ResurrectEmployeeOptions) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.resurrect_employee_options = resurrect_employee_options
        return self

    def scenario(self, scenario: Scenario) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.scenario = scenario
        return self

    def migrate_geo_options(self, migrate_geo_options: MigrateGeoOptions) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.migrate_geo_options = migrate_geo_options
        return self

    def operator(self, operator: Operator) -> "UpdateEmployeeOptionsBuilder":
        self._update_employee_options.operator = operator
        return self

    def build(self) -> "UpdateEmployeeOptions":
        return self._update_employee_options
