# 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 .meeting_agent_event_meeting import MeetingAgentEventMeeting
from .participant_joined_item import ParticipantJoinedItem
from .participant_left_item import ParticipantLeftItem
from .transcript_item import TranscriptItem
from .chat_message_item import ChatMessageItem
from .magic_share_started_item import MagicShareStartedItem
from .magic_share_ended_item import MagicShareEndedItem


class MeetingActivityItem(object):
    _types = {
        "meeting": MeetingAgentEventMeeting,
        "activity_event_type": str,
        "participant_joined_items": List[ParticipantJoinedItem],
        "participant_left_items": List[ParticipantLeftItem],
        "transcript_received_items": List[TranscriptItem],
        "chat_received_items": List[ChatMessageItem],
        "magic_share_started_items": List[MagicShareStartedItem],
        "magic_share_ended_items": List[MagicShareEndedItem],
    }

    def __init__(self, d=None):
        self.meeting: Optional[MeetingAgentEventMeeting] = None
        self.activity_event_type: Optional[str] = None
        self.participant_joined_items: Optional[List[ParticipantJoinedItem]] = None
        self.participant_left_items: Optional[List[ParticipantLeftItem]] = None
        self.transcript_received_items: Optional[List[TranscriptItem]] = None
        self.chat_received_items: Optional[List[ChatMessageItem]] = None
        self.magic_share_started_items: Optional[List[MagicShareStartedItem]] = None
        self.magic_share_ended_items: Optional[List[MagicShareEndedItem]] = None
        init(self, d, self._types)

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


class MeetingActivityItemBuilder(object):
    def __init__(self) -> None:
        self._meeting_activity_item = MeetingActivityItem()

    def meeting(self, meeting: MeetingAgentEventMeeting) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.meeting = meeting
        return self

    def activity_event_type(self, activity_event_type: str) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.activity_event_type = activity_event_type
        return self

    def participant_joined_items(self,
                                 participant_joined_items: List[ParticipantJoinedItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.participant_joined_items = participant_joined_items
        return self

    def participant_left_items(self, participant_left_items: List[ParticipantLeftItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.participant_left_items = participant_left_items
        return self

    def transcript_received_items(self,
                                  transcript_received_items: List[TranscriptItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.transcript_received_items = transcript_received_items
        return self

    def chat_received_items(self, chat_received_items: List[ChatMessageItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.chat_received_items = chat_received_items
        return self

    def magic_share_started_items(self, magic_share_started_items: List[
        MagicShareStartedItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.magic_share_started_items = magic_share_started_items
        return self

    def magic_share_ended_items(self,
                                magic_share_ended_items: List[MagicShareEndedItem]) -> "MeetingActivityItemBuilder":
        self._meeting_activity_item.magic_share_ended_items = magic_share_ended_items
        return self

    def build(self) -> "MeetingActivityItem":
        return self._meeting_activity_item
