# 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 .employee_trace_info import EmployeeTraceInfo
from .send_notification import SendNotification


class CreateEmployeeOptions(object):
    _types = {
        "geo_name": str,
        "home_user_id": str,
        "employee_trace_info": EmployeeTraceInfo,
        "enterprise_email_password": str,
        "data_source": int,
        "subscription_ids": List[str],
        "need_send_notification": SendNotification,
    }

    def __init__(self, d=None):
        self.geo_name: Optional[str] = None
        self.home_user_id: Optional[str] = None
        self.employee_trace_info: Optional[EmployeeTraceInfo] = None
        self.enterprise_email_password: Optional[str] = None
        self.data_source: Optional[int] = None
        self.subscription_ids: Optional[List[str]] = None
        self.need_send_notification: Optional[SendNotification] = None
        init(self, d, self._types)

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


class CreateEmployeeOptionsBuilder(object):
    def __init__(self) -> None:
        self._create_employee_options = CreateEmployeeOptions()

    def geo_name(self, geo_name: str) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.geo_name = geo_name
        return self

    def home_user_id(self, home_user_id: str) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.home_user_id = home_user_id
        return self

    def employee_trace_info(self, employee_trace_info: EmployeeTraceInfo) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.employee_trace_info = employee_trace_info
        return self

    def enterprise_email_password(self, enterprise_email_password: str) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.enterprise_email_password = enterprise_email_password
        return self

    def data_source(self, data_source: int) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.data_source = data_source
        return self

    def subscription_ids(self, subscription_ids: List[str]) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.subscription_ids = subscription_ids
        return self

    def need_send_notification(self, need_send_notification: SendNotification) -> "CreateEmployeeOptionsBuilder":
        self._create_employee_options.need_send_notification = need_send_notification
        return self

    def build(self) -> "CreateEmployeeOptions":
        return self._create_employee_options
