from UniTAP.dev.modules.dut_tests.dut_default_params.dp_2_1_source_general_tab import GeneralSourceDUTDp21SettingTab
from UniTAP.dev.modules.dut_tests.dut_default_params.dp_source_display_id_tab import DisplayIdDp21ConfigTab
from UniTAP.dev.modules.dut_tests.dut_default_params.dp_source_adaptive_sync_tab import AdaptiveSyncDp21ConfigTab
from UniTAP.dev.modules.dut_tests.dut_default_params.dp_2_1_video_modes import Dp21AvailableVideoModes
from UniTAP.dev.modules.dut_tests.dut_default_params.dp_2_1_dsc_video_modes import Dp21AvailableDscVideoModes
from UniTAP.dev.modules.dut_tests.dut_default_params.dp_source_audio_tab import AudioSourceDp21SettingTab


class Dp21SourceDUTTestParam:
    """
    Class `Dp21SourceDUTTestParam` allows working with default group of parameters for DP 2.1 LLCTS tests:
    - Set and get `GeneralSourceDUTDp21SettingTab`. Allows working with parameters from General source part `general`.
    - Set and get `DisplayIdDp21ConfigTab`. Allows working with parameters from Display ID part `display_id`.
    - Set and get `AdaptiveSyncDp21ConfigTab`. Allows working with parameters from Adaptive-Sync part `adaptive_sync`.
    - Set and get `Dp21AvailableVideoModes`. Allows working with parameters from Video modes part `video_modes`.
    """
    def __init__(self, json_obj):
        self.__general_tab = GeneralSourceDUTDp21SettingTab(json_obj)
        self.__audio_tab = AudioSourceDp21SettingTab(json_obj)
        self.__display_id_tab = DisplayIdDp21ConfigTab(json_obj)
        self.__adaptive_sync_tab = AdaptiveSyncDp21ConfigTab(json_obj)
        self.__video_modes = Dp21AvailableVideoModes(json_obj)
        self.__dsc_video_modes = Dp21AvailableDscVideoModes(json_obj)

    @property
    def general(self) -> GeneralSourceDUTDp21SettingTab:
        """
        Get object of parameters from General source part.

        Returns:
            object of `GeneralSourceDUTDp21SettingTab` type
        """
        return self.__general_tab

    @property
    def audio(self) -> AudioSourceDp21SettingTab:
        """
        Get object of parameters from Audio source part.

        Returns:
            object of `AudioSourceDp21SettingTab` type
        """
        return self.__audio_tab

    @property
    def display_id(self) -> DisplayIdDp21ConfigTab:
        """
        Get object of parameters from Display ID source part.

        Returns:
            object of `DisplayIdDp21ConfigTab` type
        """
        return self.__display_id_tab

    @property
    def adaptive_sync(self) -> AdaptiveSyncDp21ConfigTab:
        """
        Get object of parameters from Adaptive-Sync source part.

        Returns:
            object of `AdaptiveSyncDp21ConfigTab` type
        """
        return self.__adaptive_sync_tab

    @property
    def video_modes(self) -> Dp21AvailableVideoModes:
        """
        Get object of parameters from Video modes source part.

        Returns:
            object of `Dp21AvailableVideoModes` type
        """
        return self.__video_modes

    @property
    def dsc_video_modes(self) -> Dp21AvailableDscVideoModes:
        """
        Get object of parameters from Video modes source part.

        Returns:
            object of `Dp21AvailableVideoModes` type
        """
        return self.__dsc_video_modes
