# 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 .department import Department
from .user import User
from .user_group import UserGroup


class Scope(object):
    _types = {
        "departments": List[Department],
        "users": List[User],
        "user_groups": List[UserGroup],
    }

    def __init__(self, d=None):
        self.departments: Optional[List[Department]] = None
        self.users: Optional[List[User]] = None
        self.user_groups: Optional[List[UserGroup]] = None
        init(self, d, self._types)

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


class ScopeBuilder(object):
    def __init__(self) -> None:
        self._scope = Scope()

    def departments(self, departments: List[Department]) -> "ScopeBuilder":
        self._scope.departments = departments
        return self

    def users(self, users: List[User]) -> "ScopeBuilder":
        self._scope.users = users
        return self

    def user_groups(self, user_groups: List[UserGroup]) -> "ScopeBuilder":
        self._scope.user_groups = user_groups
        return self

    def build(self) -> "Scope":
        return self._scope
