# 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 .credential import Credential
from .profile_card import ProfileCard
from .employee_entity import EmployeeEntity
from .app import App
from .guest import Guest


class UserEntity(object):
    _types = {
        "id": str,
        "tenant_id": str,
        "user_type": str,
        "is_active": bool,
        "is_frozen": bool,
        "is_provisioned": bool,
        "is_pending": bool,
        "biz_id": str,
        "last_login_time": str,
        "home_user_id": str,
        "create_time": str,
        "update_time": str,
        "credentials": List[Credential],
        "profile_card": ProfileCard,
        "employee": EmployeeEntity,
        "app": App,
        "guest": Guest,
    }

    def __init__(self, d=None):
        self.id: Optional[str] = None
        self.tenant_id: Optional[str] = None
        self.user_type: Optional[str] = None
        self.is_active: Optional[bool] = None
        self.is_frozen: Optional[bool] = None
        self.is_provisioned: Optional[bool] = None
        self.is_pending: Optional[bool] = None
        self.biz_id: Optional[str] = None
        self.last_login_time: Optional[str] = None
        self.home_user_id: Optional[str] = None
        self.create_time: Optional[str] = None
        self.update_time: Optional[str] = None
        self.credentials: Optional[List[Credential]] = None
        self.profile_card: Optional[ProfileCard] = None
        self.employee: Optional[EmployeeEntity] = None
        self.app: Optional[App] = None
        self.guest: Optional[Guest] = None
        init(self, d, self._types)

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


class UserEntityBuilder(object):
    def __init__(self) -> None:
        self._user_entity = UserEntity()

    def id(self, id: str) -> "UserEntityBuilder":
        self._user_entity.id = id
        return self

    def tenant_id(self, tenant_id: str) -> "UserEntityBuilder":
        self._user_entity.tenant_id = tenant_id
        return self

    def user_type(self, user_type: str) -> "UserEntityBuilder":
        self._user_entity.user_type = user_type
        return self

    def is_active(self, is_active: bool) -> "UserEntityBuilder":
        self._user_entity.is_active = is_active
        return self

    def is_frozen(self, is_frozen: bool) -> "UserEntityBuilder":
        self._user_entity.is_frozen = is_frozen
        return self

    def is_provisioned(self, is_provisioned: bool) -> "UserEntityBuilder":
        self._user_entity.is_provisioned = is_provisioned
        return self

    def is_pending(self, is_pending: bool) -> "UserEntityBuilder":
        self._user_entity.is_pending = is_pending
        return self

    def biz_id(self, biz_id: str) -> "UserEntityBuilder":
        self._user_entity.biz_id = biz_id
        return self

    def last_login_time(self, last_login_time: str) -> "UserEntityBuilder":
        self._user_entity.last_login_time = last_login_time
        return self

    def home_user_id(self, home_user_id: str) -> "UserEntityBuilder":
        self._user_entity.home_user_id = home_user_id
        return self

    def create_time(self, create_time: str) -> "UserEntityBuilder":
        self._user_entity.create_time = create_time
        return self

    def update_time(self, update_time: str) -> "UserEntityBuilder":
        self._user_entity.update_time = update_time
        return self

    def credentials(self, credentials: List[Credential]) -> "UserEntityBuilder":
        self._user_entity.credentials = credentials
        return self

    def profile_card(self, profile_card: ProfileCard) -> "UserEntityBuilder":
        self._user_entity.profile_card = profile_card
        return self

    def employee(self, employee: EmployeeEntity) -> "UserEntityBuilder":
        self._user_entity.employee = employee
        return self

    def app(self, app: App) -> "UserEntityBuilder":
        self._user_entity.app = app
        return self

    def guest(self, guest: Guest) -> "UserEntityBuilder":
        self._user_entity.guest = guest
        return self

    def build(self) -> "UserEntity":
        return self._user_entity
