# 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 .quality_network import QualityNetwork
from .quality_audio import QualityAudio
from .quality_video_sharing import QualityVideoSharing
from .quality_video_sharing import QualityVideoSharing
from .quality_cpu_usage import QualityCpuUsage


class ParticipantQuality(object):
    _types = {
        "network": QualityNetwork,
        "audio": QualityAudio,
        "video": QualityVideoSharing,
        "screen_sharing": QualityVideoSharing,
        "cpu_usage": QualityCpuUsage,
    }

    def __init__(self, d=None):
        self.network: Optional[QualityNetwork] = None
        self.audio: Optional[QualityAudio] = None
        self.video: Optional[QualityVideoSharing] = None
        self.screen_sharing: Optional[QualityVideoSharing] = None
        self.cpu_usage: Optional[QualityCpuUsage] = None
        init(self, d, self._types)

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


class ParticipantQualityBuilder(object):
    def __init__(self) -> None:
        self._participant_quality = ParticipantQuality()

    def network(self, network: QualityNetwork) -> "ParticipantQualityBuilder":
        self._participant_quality.network = network
        return self

    def audio(self, audio: QualityAudio) -> "ParticipantQualityBuilder":
        self._participant_quality.audio = audio
        return self

    def video(self, video: QualityVideoSharing) -> "ParticipantQualityBuilder":
        self._participant_quality.video = video
        return self

    def screen_sharing(self, screen_sharing: QualityVideoSharing) -> "ParticipantQualityBuilder":
        self._participant_quality.screen_sharing = screen_sharing
        return self

    def cpu_usage(self, cpu_usage: QualityCpuUsage) -> "ParticipantQualityBuilder":
        self._participant_quality.cpu_usage = cpu_usage
        return self

    def build(self) -> "ParticipantQuality":
        return self._participant_quality
