# 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_text import I18nText
from .department_leader import DepartmentLeader
from .i18n_text import I18nText
from .custom_field_value import CustomFieldValue
from .custom_field_value import CustomFieldValue


class CreateDepartment(object):
    _types = {
        "custom_department_id": str,
        "name": I18nText,
        "parent_department_id": str,
        "leaders": List[DepartmentLeader],
        "hrbps": List[str],
        "order_weight": str,
        "description": I18nText,
        "department_type": int,
        "enabled_status": bool,
        "custom_field_value_map": Dict[str, CustomFieldValue],
        "custom_field_values": List[CustomFieldValue],
        "org_dimension": str,
    }

    def __init__(self, d=None):
        self.custom_department_id: Optional[str] = None
        self.name: Optional[I18nText] = None
        self.parent_department_id: Optional[str] = None
        self.leaders: Optional[List[DepartmentLeader]] = None
        self.hrbps: Optional[List[str]] = None
        self.order_weight: Optional[str] = None
        self.description: Optional[I18nText] = None
        self.department_type: Optional[int] = None
        self.enabled_status: Optional[bool] = None
        self.custom_field_value_map: Optional[Dict[str, CustomFieldValue]] = None
        self.custom_field_values: Optional[List[CustomFieldValue]] = None
        self.org_dimension: Optional[str] = None
        init(self, d, self._types)

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


class CreateDepartmentBuilder(object):
    def __init__(self) -> None:
        self._create_department = CreateDepartment()

    def custom_department_id(self, custom_department_id: str) -> "CreateDepartmentBuilder":
        self._create_department.custom_department_id = custom_department_id
        return self

    def name(self, name: I18nText) -> "CreateDepartmentBuilder":
        self._create_department.name = name
        return self

    def parent_department_id(self, parent_department_id: str) -> "CreateDepartmentBuilder":
        self._create_department.parent_department_id = parent_department_id
        return self

    def leaders(self, leaders: List[DepartmentLeader]) -> "CreateDepartmentBuilder":
        self._create_department.leaders = leaders
        return self

    def hrbps(self, hrbps: List[str]) -> "CreateDepartmentBuilder":
        self._create_department.hrbps = hrbps
        return self

    def order_weight(self, order_weight: str) -> "CreateDepartmentBuilder":
        self._create_department.order_weight = order_weight
        return self

    def description(self, description: I18nText) -> "CreateDepartmentBuilder":
        self._create_department.description = description
        return self

    def department_type(self, department_type: int) -> "CreateDepartmentBuilder":
        self._create_department.department_type = department_type
        return self

    def enabled_status(self, enabled_status: bool) -> "CreateDepartmentBuilder":
        self._create_department.enabled_status = enabled_status
        return self

    def custom_field_value_map(self, custom_field_value_map: Dict[str, CustomFieldValue]) -> "CreateDepartmentBuilder":
        self._create_department.custom_field_value_map = custom_field_value_map
        return self

    def custom_field_values(self, custom_field_values: List[CustomFieldValue]) -> "CreateDepartmentBuilder":
        self._create_department.custom_field_values = custom_field_values
        return self

    def org_dimension(self, org_dimension: str) -> "CreateDepartmentBuilder":
        self._create_department.org_dimension = org_dimension
        return self

    def build(self) -> "CreateDepartment":
        return self._create_department
