# 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 .reserved_room import ReservedRoom


class MeetingInfo(object):
    _types = {
        "meeting_id": str,
        "meeting_topic": str,
        "meeting_type": int,
        "organizer": str,
        "department": str,
        "user_id": str,
        "employee_id": str,
        "email": str,
        "mobile": str,
        "meeting_start_time": str,
        "meeting_end_time": str,
        "meeting_duration": str,
        "number_of_participants": str,
        "number_of_devices": str,
        "audio": bool,
        "video": bool,
        "sharing": bool,
        "recording": bool,
        "telephone": bool,
        "reserved_rooms": List[ReservedRoom],
        "has_related_document": bool,
        "ai_note": bool,
        "is_external": bool,
        "meeting_subtype": int,
        "meeting_instance_id": str,
        "number_of_webinar_viewers": str,
    }

    def __init__(self, d=None):
        self.meeting_id: Optional[str] = None
        self.meeting_topic: Optional[str] = None
        self.meeting_type: Optional[int] = None
        self.organizer: Optional[str] = None
        self.department: Optional[str] = None
        self.user_id: Optional[str] = None
        self.employee_id: Optional[str] = None
        self.email: Optional[str] = None
        self.mobile: Optional[str] = None
        self.meeting_start_time: Optional[str] = None
        self.meeting_end_time: Optional[str] = None
        self.meeting_duration: Optional[str] = None
        self.number_of_participants: Optional[str] = None
        self.number_of_devices: Optional[str] = None
        self.audio: Optional[bool] = None
        self.video: Optional[bool] = None
        self.sharing: Optional[bool] = None
        self.recording: Optional[bool] = None
        self.telephone: Optional[bool] = None
        self.reserved_rooms: Optional[List[ReservedRoom]] = None
        self.has_related_document: Optional[bool] = None
        self.ai_note: Optional[bool] = None
        self.is_external: Optional[bool] = None
        self.meeting_subtype: Optional[int] = None
        self.meeting_instance_id: Optional[str] = None
        self.number_of_webinar_viewers: Optional[str] = None
        init(self, d, self._types)

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


class MeetingInfoBuilder(object):
    def __init__(self) -> None:
        self._meeting_info = MeetingInfo()

    def meeting_id(self, meeting_id: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_id = meeting_id
        return self

    def meeting_topic(self, meeting_topic: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_topic = meeting_topic
        return self

    def meeting_type(self, meeting_type: int) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_type = meeting_type
        return self

    def organizer(self, organizer: str) -> "MeetingInfoBuilder":
        self._meeting_info.organizer = organizer
        return self

    def department(self, department: str) -> "MeetingInfoBuilder":
        self._meeting_info.department = department
        return self

    def user_id(self, user_id: str) -> "MeetingInfoBuilder":
        self._meeting_info.user_id = user_id
        return self

    def employee_id(self, employee_id: str) -> "MeetingInfoBuilder":
        self._meeting_info.employee_id = employee_id
        return self

    def email(self, email: str) -> "MeetingInfoBuilder":
        self._meeting_info.email = email
        return self

    def mobile(self, mobile: str) -> "MeetingInfoBuilder":
        self._meeting_info.mobile = mobile
        return self

    def meeting_start_time(self, meeting_start_time: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_start_time = meeting_start_time
        return self

    def meeting_end_time(self, meeting_end_time: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_end_time = meeting_end_time
        return self

    def meeting_duration(self, meeting_duration: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_duration = meeting_duration
        return self

    def number_of_participants(self, number_of_participants: str) -> "MeetingInfoBuilder":
        self._meeting_info.number_of_participants = number_of_participants
        return self

    def number_of_devices(self, number_of_devices: str) -> "MeetingInfoBuilder":
        self._meeting_info.number_of_devices = number_of_devices
        return self

    def audio(self, audio: bool) -> "MeetingInfoBuilder":
        self._meeting_info.audio = audio
        return self

    def video(self, video: bool) -> "MeetingInfoBuilder":
        self._meeting_info.video = video
        return self

    def sharing(self, sharing: bool) -> "MeetingInfoBuilder":
        self._meeting_info.sharing = sharing
        return self

    def recording(self, recording: bool) -> "MeetingInfoBuilder":
        self._meeting_info.recording = recording
        return self

    def telephone(self, telephone: bool) -> "MeetingInfoBuilder":
        self._meeting_info.telephone = telephone
        return self

    def reserved_rooms(self, reserved_rooms: List[ReservedRoom]) -> "MeetingInfoBuilder":
        self._meeting_info.reserved_rooms = reserved_rooms
        return self

    def has_related_document(self, has_related_document: bool) -> "MeetingInfoBuilder":
        self._meeting_info.has_related_document = has_related_document
        return self

    def ai_note(self, ai_note: bool) -> "MeetingInfoBuilder":
        self._meeting_info.ai_note = ai_note
        return self

    def is_external(self, is_external: bool) -> "MeetingInfoBuilder":
        self._meeting_info.is_external = is_external
        return self

    def meeting_subtype(self, meeting_subtype: int) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_subtype = meeting_subtype
        return self

    def meeting_instance_id(self, meeting_instance_id: str) -> "MeetingInfoBuilder":
        self._meeting_info.meeting_instance_id = meeting_instance_id
        return self

    def number_of_webinar_viewers(self, number_of_webinar_viewers: str) -> "MeetingInfoBuilder":
        self._meeting_info.number_of_webinar_viewers = number_of_webinar_viewers
        return self

    def build(self) -> "MeetingInfo":
        return self._meeting_info
