# 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_name import I18nName
from .collaboration_department_leader import CollaborationDepartmentLeader
from .collaboration_department_id import CollaborationDepartmentId


class CollaborationDepartment(object):
    _types = {
        "open_department_id": str,
        "department_id": str,
        "name": str,
        "i18n_name": I18nName,
        "order": str,
        "leaders": List[CollaborationDepartmentLeader],
        "parent_department_id": CollaborationDepartmentId,
    }

    def __init__(self, d=None):
        self.open_department_id: Optional[str] = None
        self.department_id: Optional[str] = None
        self.name: Optional[str] = None
        self.i18n_name: Optional[I18nName] = None
        self.order: Optional[str] = None
        self.leaders: Optional[List[CollaborationDepartmentLeader]] = None
        self.parent_department_id: Optional[CollaborationDepartmentId] = None
        init(self, d, self._types)

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


class CollaborationDepartmentBuilder(object):
    def __init__(self) -> None:
        self._collaboration_department = CollaborationDepartment()

    def open_department_id(self, open_department_id: str) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.open_department_id = open_department_id
        return self

    def department_id(self, department_id: str) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.department_id = department_id
        return self

    def name(self, name: str) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.name = name
        return self

    def i18n_name(self, i18n_name: I18nName) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.i18n_name = i18n_name
        return self

    def order(self, order: str) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.order = order
        return self

    def leaders(self, leaders: List[CollaborationDepartmentLeader]) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.leaders = leaders
        return self

    def parent_department_id(self, parent_department_id: CollaborationDepartmentId) -> "CollaborationDepartmentBuilder":
        self._collaboration_department.parent_department_id = parent_department_id
        return self

    def build(self) -> "CollaborationDepartment":
        return self._collaboration_department
