# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init


class BaseChat(object):
    _types = {
        "chat_id": str,
        "avatar": str,
        "name": str,
        "description": str,
        "owner_id": str,
        "owner_id_type": str,
        "external": bool,
        "tenant_key": str,
        "labels": List[str],
        "chat_status": str,
        "chat_mode": str,
        "p2p_target_id": str,
        "p2p_target_type": str,
    }

    def __init__(self, d=None):
        self.chat_id: Optional[str] = None
        self.avatar: Optional[str] = None
        self.name: Optional[str] = None
        self.description: Optional[str] = None
        self.owner_id: Optional[str] = None
        self.owner_id_type: Optional[str] = None
        self.external: Optional[bool] = None
        self.tenant_key: Optional[str] = None
        self.labels: Optional[List[str]] = None
        self.chat_status: Optional[str] = None
        self.chat_mode: Optional[str] = None
        self.p2p_target_id: Optional[str] = None
        self.p2p_target_type: Optional[str] = None
        init(self, d, self._types)

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


class BaseChatBuilder(object):
    def __init__(self) -> None:
        self._base_chat = BaseChat()

    def chat_id(self, chat_id: str) -> "BaseChatBuilder":
        self._base_chat.chat_id = chat_id
        return self

    def avatar(self, avatar: str) -> "BaseChatBuilder":
        self._base_chat.avatar = avatar
        return self

    def name(self, name: str) -> "BaseChatBuilder":
        self._base_chat.name = name
        return self

    def description(self, description: str) -> "BaseChatBuilder":
        self._base_chat.description = description
        return self

    def owner_id(self, owner_id: str) -> "BaseChatBuilder":
        self._base_chat.owner_id = owner_id
        return self

    def owner_id_type(self, owner_id_type: str) -> "BaseChatBuilder":
        self._base_chat.owner_id_type = owner_id_type
        return self

    def external(self, external: bool) -> "BaseChatBuilder":
        self._base_chat.external = external
        return self

    def tenant_key(self, tenant_key: str) -> "BaseChatBuilder":
        self._base_chat.tenant_key = tenant_key
        return self

    def labels(self, labels: List[str]) -> "BaseChatBuilder":
        self._base_chat.labels = labels
        return self

    def chat_status(self, chat_status: str) -> "BaseChatBuilder":
        self._base_chat.chat_status = chat_status
        return self

    def chat_mode(self, chat_mode: str) -> "BaseChatBuilder":
        self._base_chat.chat_mode = chat_mode
        return self

    def p2p_target_id(self, p2p_target_id: str) -> "BaseChatBuilder":
        self._base_chat.p2p_target_id = p2p_target_id
        return self

    def p2p_target_type(self, p2p_target_type: str) -> "BaseChatBuilder":
        self._base_chat.p2p_target_type = p2p_target_type
        return self

    def build(self) -> "BaseChat":
        return self._base_chat
