"""UCD SDK 枚举与 UI/SDK 字符串映射。"""

from enum import IntEnum
import UniTAP


class UCDEnum:
    class ColorInfo:
        """

        Class contains information of frame `ColorFormat`, `DynamicRange`, `Colorimetry`.

        """

        class ColorFormat(IntEnum):
            """
            Contains values of possible color format.
            """

            CF_NONE = 0
            CF_UNKNOWN = 1
            CF_RGB = 2
            CF_YCbCr_422 = 3
            CF_YCbCr_444 = 4
            CF_YCbCr_420 = 5
            CF_IDO_DEFINED = 6
            CF_Y_ONLY = 7
            CF_RAW = 8
            CF_DSC = 9

        class DynamicRange(IntEnum):
            """
            Contains values of possible dynamic range.
            """

            DR_UNKNOWN = -1
            DR_VESA = 0
            DR_CTA = 1

        class Colorimetry(IntEnum):
            """
            Contains values of possible colorimetry.
            """

            CM_NONE = 0
            CM_RESERVED = 1
            CM_sRGB = 2
            CM_SMPTE_170M = 3
            CM_ITUR_BT601 = 4
            CM_ITUR_BT709 = 5
            CM_xvYCC601 = 6
            CM_xvYCC709 = 7
            CM_sYCC601 = 8
            CM_AdobeYCC601 = 9
            CM_AdobeRGB = 10
            CM_ITUR_BT2020_YcCbcCrc = 11
            CM_ITUR_BT2020_YCbCr = 12
            CM_ITUR_BT2020_RGB = 13
            CM_RGB_WIDE_GAMUT_FIX = 14
            CM_RGB_WIDE_GAMUT_FLT = 15
            CM_DCI_P3 = 16
            CM_DICOM_1_4_GRAY_SCALE = 17
            CM_CUSTOM_COLOR_PROFILE = 18

            CM_opYCC601 = CM_AdobeYCC601
            CM_opRGB = CM_AdobeRGB

        # 颜色格式映射 - 支持不区分大小写的字符串匹配
        @staticmethod
        def get_color_format(format_str):
            format_map = {
                "none": UniTAP.ColorInfo.ColorFormat.CF_NONE,
                "unknown": UniTAP.ColorInfo.ColorFormat.CF_UNKNOWN,
                "rgb": UniTAP.ColorInfo.ColorFormat.CF_RGB,
                "ycbcr422": UniTAP.ColorInfo.ColorFormat.CF_YCbCr_422,
                "ycbcr444": UniTAP.ColorInfo.ColorFormat.CF_YCbCr_444,
                "ycbcr420": UniTAP.ColorInfo.ColorFormat.CF_YCbCr_420,
                "ido_defined": UniTAP.ColorInfo.ColorFormat.CF_IDO_DEFINED,
                "yonly": UniTAP.ColorInfo.ColorFormat.CF_Y_ONLY,
                "raw": UniTAP.ColorInfo.ColorFormat.CF_RAW,
                "dsc": UniTAP.ColorInfo.ColorFormat.CF_DSC,
            }
            if not format_str:
                return None
            return format_map.get(format_str.lower(), None)

        # 色度映射 - 支持不区分大小写的字符串匹配
        @staticmethod
        def get_colorimetry(colorimetry_str):
            colorimetry_map = {
                "none": UniTAP.ColorInfo.Colorimetry.CM_NONE,
                "reserved": UniTAP.ColorInfo.Colorimetry.CM_RESERVED,
                "srgb": UniTAP.ColorInfo.Colorimetry.CM_sRGB,
                "smpte170m": UniTAP.ColorInfo.Colorimetry.CM_SMPTE_170M,
                "bt601": UniTAP.ColorInfo.Colorimetry.CM_ITUR_BT601,
                "bt709": UniTAP.ColorInfo.Colorimetry.CM_ITUR_BT709,
                "xvycc601": UniTAP.ColorInfo.Colorimetry.CM_xvYCC601,
                "xvycc709": UniTAP.ColorInfo.Colorimetry.CM_xvYCC709,
                "sycc601": UniTAP.ColorInfo.Colorimetry.CM_sYCC601,
                "adobeycc601": UniTAP.ColorInfo.Colorimetry.CM_AdobeYCC601,
                "adobergb": UniTAP.ColorInfo.Colorimetry.CM_AdobeRGB,
                "bt2020yccbccrc": UniTAP.ColorInfo.Colorimetry.CM_ITUR_BT2020_YcCbcCrc,
                "bt2020ycbcr": UniTAP.ColorInfo.Colorimetry.CM_ITUR_BT2020_YCbCr,
                "bt2020rgb": UniTAP.ColorInfo.Colorimetry.CM_ITUR_BT2020_RGB,
                "rgbwidegamutfix": UniTAP.ColorInfo.Colorimetry.CM_RGB_WIDE_GAMUT_FIX,
                "rgbwidegamutflt": UniTAP.ColorInfo.Colorimetry.CM_RGB_WIDE_GAMUT_FLT,
                "dcip3": UniTAP.ColorInfo.Colorimetry.CM_DCI_P3,
                "dicom14grayscale": UniTAP.ColorInfo.Colorimetry.CM_DICOM_1_4_GRAY_SCALE,
                "customcolorprofile": UniTAP.ColorInfo.Colorimetry.CM_CUSTOM_COLOR_PROFILE,
                "opycc601": UniTAP.ColorInfo.Colorimetry.CM_opYCC601,
                "oprgb": UniTAP.ColorInfo.Colorimetry.CM_opRGB,
            }
            if not colorimetry_str:
                return None
            # Normalize: strip hyphens, spaces, dots, underscores so that
            # "DCI-P3" → "dcip3", "BT.709" → "bt709", "BT.2020 YCbCr" → "bt2020ycbcr"
            normalized = (
                colorimetry_str.lower()
                .replace("-", "")
                .replace(" ", "")
                .replace(".", "")
                .replace("_", "")
            )
            return colorimetry_map.get(normalized, colorimetry_map.get(colorimetry_str.lower(), None))

    class VideoPatternInfo:
        class VideoPattern(IntEnum):
            """
            Class `VideoPattern` contains all possible variants of patterns which can be set in the function `set_pattern`.
            """

            Disabled = 0
            ColorBars = 1
            Chessboard = 2
            SolidColor = 3
            SolidWhite = 4
            SolidRed = 5
            SolidGreen = 6
            SolidBlue = 7
            WhiteVStrips = 8
            GradientRGBStripes = 9
            ColorRamp = 10
            ColorSquares = 11
            MotionPattern = 12
            SquareWindow = 15

        class VideoPatternParams(IntEnum):
            """
            Class `VideoPatternParams` contains all possible variants of parameters which can be set in the function `set_pattern_params`.
            """

            SolidColor = 3
            WhiteVStrips = 8
            GradientRGBStripes = 9
            MotionPattern = 12
            SquareWindow = 15

        @staticmethod
        def get_video_pattern(pattern_str):
            pattern_map = {
                "disabled": UniTAP.VideoPattern.Disabled,
                "colorbars": UniTAP.VideoPattern.ColorBars,
                "chessboard": UniTAP.VideoPattern.Chessboard,
                "solidcolor": UniTAP.VideoPattern.SolidColor,
                "solidwhite": UniTAP.VideoPattern.SolidWhite,
                "solidred": UniTAP.VideoPattern.SolidRed,
                "solidgreen": UniTAP.VideoPattern.SolidGreen,
                "solidblue": UniTAP.VideoPattern.SolidBlue,
                "whitevstrips": UniTAP.VideoPattern.WhiteVStrips,
                "gradientrgbstripes": UniTAP.VideoPattern.GradientRGBStripes,
                "colorramp": UniTAP.VideoPattern.ColorRamp,
                "coloursquares": UniTAP.VideoPattern.ColorSquares,
                "motionpattern": UniTAP.VideoPattern.MotionPattern,
                "squarewindow": UniTAP.VideoPattern.SquareWindow,
            }
            if not pattern_str:
                return None
            return pattern_map.get(pattern_str.lower(), None)

    class TimingInfo:
        class ResolutionType(IntEnum):
            """
            分辨率类型枚举，包含DMT、CTA、CVT和OVT四种类型
            """

            DMT = 0  # VESA Display Monitor Timing
            CTA = 1  # Consumer Technology Association
            CVT = 2  # Coordinated Video Timing
            OVT = 3  # Other Video Timing

        # 分辨率类型映射
        resolution_type_map = {
            "dmt": ResolutionType.DMT,
            "cta": ResolutionType.CTA,
            "cvt": ResolutionType.CVT,
            "ovt": ResolutionType.OVT,
        }

        # DMT分辨率ID映射
        dmt_resolution_map = {
            9: {"width": 800, "height": 600, "refresh_rate": 60.317, "id_hex": "9h"},
            14: {"width": 848, "height": 480, "refresh_rate": 60.0, "id_hex": "Eh"},
            16: {"width": 1024, "height": 768, "refresh_rate": 60.0, "id_hex": "10h"},
            23: {"width": 1280, "height": 768, "refresh_rate": 60.0, "id_hex": "17h"},
            27: {
                "width": 1280,
                "height": 800,
                "refresh_rate": 60.0,
                "id_hex": "1Bh",
                "note": "RB1",
            },
            28: {"width": 1280, "height": 800, "refresh_rate": 60.0, "id_hex": "1Ch"},
            32: {"width": 1280, "height": 960, "refresh_rate": 60.0, "id_hex": "20h"},
            35: {"width": 1280, "height": 1024, "refresh_rate": 60.0, "id_hex": "23h"},
            39: {"width": 1360, "height": 768, "refresh_rate": 60.0, "id_hex": "27h"},
            41: {
                "width": 1400,
                "height": 1050,
                "refresh_rate": 60.0,
                "id_hex": "29h",
                "note": "RB1",
            },
            42: {"width": 1400, "height": 1050, "refresh_rate": 60.0, "id_hex": "2Ah"},
            47: {"width": 1440, "height": 900, "refresh_rate": 59.887, "id_hex": "2Fh"},
            51: {"width": 1600, "height": 1200, "refresh_rate": 60.0, "id_hex": "33h"},
            57: {
                "width": 1680,
                "height": 1050,
                "refresh_rate": 60.0,
                "id_hex": "39h",
                "note": "RB1",
            },
            58: {"width": 1680, "height": 1050, "refresh_rate": 60.0, "id_hex": "3Ah"},
            62: {"width": 1792, "height": 1344, "refresh_rate": 60.0, "id_hex": "3Eh"},
            65: {"width": 1856, "height": 1392, "refresh_rate": 60.0, "id_hex": "41h"},
            69: {"width": 1920, "height": 1200, "refresh_rate": 60.0, "id_hex": "45h"},
            73: {"width": 1920, "height": 1440, "refresh_rate": 60.0, "id_hex": "49h"},
            76: {
                "width": 2560,
                "height": 1600,
                "refresh_rate": 60.0,
                "id_hex": "4Ch",
                "note": "RB1",
            },
            77: {"width": 2560, "height": 1600, "refresh_rate": 60.0, "id_hex": "4Dh"},
            82: {"width": 1920, "height": 1080, "refresh_rate": 60.0, "id_hex": "52h"},
        }

        # CTA分辨率ID映射
        cta_resolution_map = {
            1: {"width": 640, "height": 480, "refresh_rate": 59.94, "vic": 1},
            2: {"width": 720, "height": 480, "refresh_rate": 59.94, "vic": 2},
            3: {"width": 720, "height": 480, "refresh_rate": 59.94, "vic": 3},
            4: {"width": 1280, "height": 720, "refresh_rate": 60.0, "vic": 4},
            8: {"width": 1440, "height": 240, "refresh_rate": 59.826, "vic": 8},
            9: {"width": 1440, "height": 240, "refresh_rate": 60.054, "vic": 9},
            12: {"width": 2880, "height": 240, "refresh_rate": 59.826, "vic": 12},
            13: {"width": 2880, "height": 240, "refresh_rate": 59.826, "vic": 13},
            14: {"width": 1440, "height": 480, "refresh_rate": 59.94, "vic": 14},
            15: {"width": 1440, "height": 480, "refresh_rate": 59.94, "vic": 15},
            16: {"width": 1920, "height": 1080, "refresh_rate": 60.0, "vic": 16},
            17: {"width": 720, "height": 576, "refresh_rate": 50.0, "vic": 17},
            18: {"width": 720, "height": 576, "refresh_rate": 50.0, "vic": 18},
            19: {"width": 1280, "height": 720, "refresh_rate": 50.0, "vic": 19},
            23: {"width": 1440, "height": 288, "refresh_rate": 49.761, "vic": 23},
            24: {"width": 1440, "height": 288, "refresh_rate": 49.761, "vic": 24},
            27: {"width": 2880, "height": 288, "refresh_rate": 49.761, "vic": 27},
            28: {"width": 2880, "height": 288, "refresh_rate": 49.761, "vic": 28},
            29: {"width": 1440, "height": 576, "refresh_rate": 50.0, "vic": 29},
            30: {"width": 1440, "height": 576, "refresh_rate": 50.0, "vic": 30},
            31: {"width": 1920, "height": 1080, "refresh_rate": 50.0, "vic": 31},
            32: {"width": 1920, "height": 1080, "refresh_rate": 24.0, "vic": 32},
            33: {"width": 1920, "height": 1080, "refresh_rate": 25.0, "vic": 33},
            34: {"width": 1920, "height": 1080, "refresh_rate": 30.0, "vic": 34},
            35: {"width": 2880, "height": 480, "refresh_rate": 59.94, "vic": 35},
            36: {"width": 2880, "height": 480, "refresh_rate": 59.94, "vic": 36},
            37: {"width": 2880, "height": 576, "refresh_rate": 50.0, "vic": 37},
            38: {"width": 2880, "height": 576, "refresh_rate": 50.0, "vic": 38},
            41: {"width": 1280, "height": 720, "refresh_rate": 100.0, "vic": 41},
            42: {"width": 720, "height": 576, "refresh_rate": 100.0, "vic": 42},
            43: {"width": 720, "height": 576, "refresh_rate": 100.0, "vic": 43},
            47: {"width": 1280, "height": 720, "refresh_rate": 120.0, "vic": 47},
            48: {"width": 720, "height": 480, "refresh_rate": 120.0, "vic": 48},
            49: {"width": 720, "height": 480, "refresh_rate": 119.88, "vic": 49},
            52: {"width": 720, "height": 576, "refresh_rate": 200.0, "vic": 52},
            53: {"width": 720, "height": 576, "refresh_rate": 200.0, "vic": 53},
            56: {"width": 720, "height": 480, "refresh_rate": 239.76, "vic": 56},
            57: {"width": 720, "height": 480, "refresh_rate": 239.76, "vic": 57},
            60: {"width": 1280, "height": 720, "refresh_rate": 24.0, "vic": 60},
            61: {"width": 1280, "height": 720, "refresh_rate": 25.0, "vic": 61},
            62: {"width": 1280, "height": 720, "refresh_rate": 30.0, "vic": 62},
            63: {"width": 1920, "height": 1080, "refresh_rate": 120.0, "vic": 63},
            64: {"width": 1920, "height": 1080, "refresh_rate": 100.0, "vic": 64},
            65: {"width": 1280, "height": 720, "refresh_rate": 24.0, "vic": 65},
            66: {"width": 1280, "height": 720, "refresh_rate": 25.0, "vic": 66},
            67: {"width": 1280, "height": 720, "refresh_rate": 30.0, "vic": 67},
            68: {"width": 1280, "height": 720, "refresh_rate": 50.0, "vic": 68},
            69: {"width": 1280, "height": 720, "refresh_rate": 60.0, "vic": 69},
            70: {"width": 1280, "height": 720, "refresh_rate": 100.0, "vic": 70},
            71: {"width": 1280, "height": 720, "refresh_rate": 120.0, "vic": 71},
            72: {"width": 1920, "height": 1080, "refresh_rate": 24.0, "vic": 72},
            73: {"width": 1920, "height": 1080, "refresh_rate": 25.0, "vic": 73},
            74: {"width": 1920, "height": 1080, "refresh_rate": 30.0, "vic": 74},
            75: {"width": 1920, "height": 1080, "refresh_rate": 50.0, "vic": 75},
            76: {"width": 1920, "height": 1080, "refresh_rate": 60.0, "vic": 76},
            77: {"width": 1920, "height": 1080, "refresh_rate": 100.0, "vic": 77},
            78: {"width": 1920, "height": 1080, "refresh_rate": 120.0, "vic": 78},
            79: {"width": 1680, "height": 720, "refresh_rate": 24.0, "vic": 79},
            80: {"width": 1680, "height": 720, "refresh_rate": 25.0, "vic": 80},
            81: {"width": 1680, "height": 720, "refresh_rate": 30.0, "vic": 81},
            82: {"width": 1680, "height": 720, "refresh_rate": 50.0, "vic": 82},
            83: {"width": 1680, "height": 720, "refresh_rate": 60.0, "vic": 83},
            84: {"width": 1680, "height": 720, "refresh_rate": 100.0, "vic": 84},
            85: {"width": 1680, "height": 720, "refresh_rate": 120.0, "vic": 85},
            86: {"width": 2560, "height": 1080, "refresh_rate": 24.0, "vic": 86},
            87: {"width": 2560, "height": 1080, "refresh_rate": 25.0, "vic": 87},
            88: {"width": 2560, "height": 1080, "refresh_rate": 30.0, "vic": 88},
            89: {"width": 2560, "height": 1080, "refresh_rate": 50.0, "vic": 89},
            90: {"width": 2560, "height": 1080, "refresh_rate": 60.0, "vic": 90},
            91: {"width": 2560, "height": 1080, "refresh_rate": 100.0, "vic": 91},
            92: {"width": 2560, "height": 1080, "refresh_rate": 120.0, "vic": 92},
            93: {"width": 3840, "height": 2160, "refresh_rate": 24.0, "vic": 93},
            94: {"width": 3840, "height": 2160, "refresh_rate": 25.0, "vic": 94},
            95: {"width": 3840, "height": 2160, "refresh_rate": 30.0, "vic": 95},
            96: {"width": 3840, "height": 2160, "refresh_rate": 50.0, "vic": 96},
            97: {"width": 3840, "height": 2160, "refresh_rate": 60.0, "vic": 97},
            98: {"width": 4096, "height": 2160, "refresh_rate": 24.0, "vic": 98},
            99: {"width": 4096, "height": 2160, "refresh_rate": 25.0, "vic": 99},
            100: {"width": 4096, "height": 2160, "refresh_rate": 30.0, "vic": 100},
            101: {"width": 4096, "height": 2160, "refresh_rate": 50.0, "vic": 101},
            102: {"width": 4096, "height": 2160, "refresh_rate": 60.0, "vic": 102},
            103: {"width": 3840, "height": 2160, "refresh_rate": 24.0, "vic": 103},
            104: {"width": 3840, "height": 2160, "refresh_rate": 25.0, "vic": 104},
            105: {"width": 3840, "height": 2160, "refresh_rate": 30.0, "vic": 105},
            106: {"width": 3840, "height": 2160, "refresh_rate": 50.0, "vic": 106},
            107: {"width": 3840, "height": 2160, "refresh_rate": 60.0, "vic": 107},
            108: {"width": 1280, "height": 720, "refresh_rate": 48.0, "vic": 108},
            109: {"width": 1280, "height": 720, "refresh_rate": 48.0, "vic": 109},
            110: {"width": 1680, "height": 720, "refresh_rate": 48.0, "vic": 110},
            111: {"width": 1920, "height": 1080, "refresh_rate": 48.0, "vic": 111},
            112: {"width": 1920, "height": 1080, "refresh_rate": 48.0, "vic": 112},
            113: {"width": 2560, "height": 1080, "refresh_rate": 48.0, "vic": 113},
            114: {"width": 3840, "height": 2160, "refresh_rate": 48.0, "vic": 114},
            115: {"width": 4096, "height": 2160, "refresh_rate": 48.0, "vic": 115},
            116: {"width": 3840, "height": 2160, "refresh_rate": 48.0, "vic": 116},
            117: {"width": 3840, "height": 2160, "refresh_rate": 100.0, "vic": 117},
            118: {"width": 3840, "height": 2160, "refresh_rate": 120.0, "vic": 118},
            119: {"width": 3840, "height": 2160, "refresh_rate": 100.0, "vic": 119},
            120: {"width": 3840, "height": 2160, "refresh_rate": 120.0, "vic": 120},
            218: {"width": 4096, "height": 2160, "refresh_rate": 100.0, "vic": 218},
            219: {"width": 4096, "height": 2160, "refresh_rate": 120.0, "vic": 219},
        }

        # CVT分辨率ID映射
        cvt_resolution_map = {
            0: [
                {"width": 640, "height": 480, "refresh_rate": 60.0},
                {"width": 768, "height": 480, "refresh_rate": 84.502},
                {"width": 1024, "height": 640, "refresh_rate": 59.887},
                {"width": 1152, "height": 720, "refresh_rate": 74.721},
                {"width": 1280, "height": 768, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 1280, "height": 960, "refresh_rate": 59.939},
                {"width": 1536, "height": 960, "refresh_rate": 84.884},
                {"width": 1600, "height": 1200, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 30.0, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 30.0, "note": "RB2"},
                {"width": 1920, "height": 1080, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 60.0, "note": "RB2"},
                {"width": 1920, "height": 1080, "refresh_rate": 84.884},
                {"width": 1920, "height": 1080, "refresh_rate": 120.0, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 120.0, "note": "RB2"},
                {"width": 1920, "height": 1080, "refresh_rate": 144.05, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 144.05, "note": "RB2"},
                {"width": 1920, "height": 1080, "refresh_rate": 144.05, "note": "RB3"},
                {"width": 1920, "height": 1080, "refresh_rate": 200.07, "note": "RB3"},
                {"width": 1920, "height": 1080, "refresh_rate": 239.898, "note": "RB1"},
                {"width": 1920, "height": 1080, "refresh_rate": 239.898, "note": "RB2"},
                {"width": 1920, "height": 1080, "refresh_rate": 239.898, "note": "RB3"},
                {"width": 1920, "height": 1440, "refresh_rate": 59.974, "note": "RB1"},
                {"width": 2048, "height": 1280, "refresh_rate": 59.922, "note": "RB1"},
                {"width": 2048, "height": 1536, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 2128, "height": 1200, "refresh_rate": 59.946},
                {"width": 2456, "height": 1536, "refresh_rate": 50.0},
                {"width": 2456, "height": 1536, "refresh_rate": 74.935},
                {"width": 2560, "height": 1080, "refresh_rate": 60.0},
                {"width": 2560, "height": 1080, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 2560, "height": 1080, "refresh_rate": 144.051, "note": "RB3"},
                {"width": 2560, "height": 1080, "refresh_rate": 200.07, "note": "RB3"},
                {"width": 2560, "height": 1440, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 2560, "height": 1440, "refresh_rate": 60.0, "note": "RB2"},
                {"width": 2560, "height": 1440, "refresh_rate": 144.05, "note": "RB3"},
                {"width": 2560, "height": 1440, "refresh_rate": 200.07, "note": "RB3"},
                {"width": 2560, "height": 1920, "refresh_rate": 74.979},
                {"width": 2728, "height": 1536, "refresh_rate": 59.944},
                {"width": 3440, "height": 1440, "refresh_rate": 60.0},
                {"width": 3440, "height": 1440, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 3440, "height": 1440, "refresh_rate": 60.0, "note": "RB2"},
                {"width": 3440, "height": 1440, "refresh_rate": 120.0},
                {"width": 3440, "height": 1440, "refresh_rate": 120.0, "note": "RB1"},
                {"width": 3440, "height": 1440, "refresh_rate": 120.0, "note": "RB2"},
                {"width": 3440, "height": 1440, "refresh_rate": 165.0, "note": "RB1"},
                {"width": 3440, "height": 1440, "refresh_rate": 165.0, "note": "RB2"},
                {"width": 3440, "height": 1440, "refresh_rate": 200.0, "note": "RB1"},
                {"width": 3440, "height": 1440, "refresh_rate": 200.0, "note": "RB2"},
                {"width": 3840, "height": 2160, "refresh_rate": 30.0, "note": "RB1"},
                {"width": 3840, "height": 2160, "refresh_rate": 30.0, "note": "RB2"},
                {"width": 3840, "height": 2160, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 3840, "height": 2160, "refresh_rate": 60.0, "note": "RB2"},
                {"width": 3840, "height": 2160, "refresh_rate": 60.021, "note": "RB3"},
                {"width": 3840, "height": 2160, "refresh_rate": 120.0, "note": "RB1"},
                {"width": 3840, "height": 2160, "refresh_rate": 120.0, "note": "RB2"},
                {"width": 4096, "height": 2160, "refresh_rate": 60.0, "note": "RB1"},
                {"width": 4096, "height": 2160, "refresh_rate": 60.0, "note": "RB2"},
                {"width": 4096, "height": 2160, "refresh_rate": 60.021, "note": "RB3"},
            ]
        }

        # OVT分辨率ID映射
        ovt_resolution_map = {
            0: [
                {"width": 768, "height": 480, "refresh_rate": 85.0},
                {"width": 1024, "height": 640, "refresh_rate": 60.0},
                {"width": 1152, "height": 720, "refresh_rate": 75.0},
                {"width": 1280, "height": 768, "refresh_rate": 60.0},
                {"width": 1280, "height": 960, "refresh_rate": 60.0},
                {"width": 1440, "height": 240, "refresh_rate": 60.0},
                {"width": 1440, "height": 480, "refresh_rate": 60.0},
                {"width": 1440, "height": 900, "refresh_rate": 60.0},
                {"width": 1536, "height": 960, "refresh_rate": 85.0},
                {"width": 1920, "height": 1080, "refresh_rate": 30.0},
                {"width": 1920, "height": 1080, "refresh_rate": 60.0},
                {"width": 1920, "height": 1080, "refresh_rate": 85.0},
                {"width": 1920, "height": 1080, "refresh_rate": 100.0},
                {"width": 1920, "height": 1080, "refresh_rate": 120.0},
                {"width": 1920, "height": 1440, "refresh_rate": 60.0},
                {"width": 2048, "height": 1280, "refresh_rate": 60.0},
                {"width": 2048, "height": 1536, "refresh_rate": 60.0},
                {"width": 2128, "height": 1200, "refresh_rate": 60.0},
                {"width": 2456, "height": 1536, "refresh_rate": 50.0},
                {"width": 2456, "height": 1536, "refresh_rate": 75.0},
                {"width": 2560, "height": 1080, "refresh_rate": 30.0},
                {"width": 2560, "height": 1080, "refresh_rate": 60.0},
                {"width": 2560, "height": 1080, "refresh_rate": 120.0},
                {"width": 2560, "height": 1600, "refresh_rate": 60.0},
                {"width": 2560, "height": 1920, "refresh_rate": 75.0},
                {"width": 2728, "height": 1536, "refresh_rate": 60.0},
                {"width": 3840, "height": 2160, "refresh_rate": 30.0},
                {"width": 3840, "height": 2160, "refresh_rate": 60.0},
                {"width": 3840, "height": 2160, "refresh_rate": 120.0},
                {"width": 4096, "height": 2160, "refresh_rate": 30.0},
            ],
            1: [
                {"width": 1280, "height": 720, "refresh_rate": 24.0},
                {"width": 1280, "height": 720, "refresh_rate": 120.0},
            ],
            4: [
                {"width": 1920, "height": 1080, "refresh_rate": 144.0},
                {"width": 1920, "height": 1080, "refresh_rate": 240.0},
            ],
        }

        # 根据分辨率类型和ID获取分辨率信息的函数
        @staticmethod
        def get_resolution_info(resolution_type, resolution_id):
            """
            根据分辨率类型和ID获取分辨率信息

            Args:
                resolution_type: 分辨率类型，可以是DMT、CTA、CVT或OVT
                resolution_id: 分辨率ID

            Returns:
                包含分辨率信息的字典，如果未找到则返回None
            """
            if resolution_type == UCDEnum.ResolutionType.DMT:
                return UCDEnum.dmt_resolution_map.get(resolution_id)
            elif resolution_type == UCDEnum.ResolutionType.CTA:
                return UCDEnum.cta_resolution_map.get(resolution_id)
            elif resolution_type == UCDEnum.ResolutionType.CVT:
                resolutions = UCDEnum.cvt_resolution_map.get(resolution_id, [])
                return resolutions[0] if resolutions else None
            elif resolution_type == UCDEnum.ResolutionType.OVT:
                resolutions = UCDEnum.ovt_resolution_map.get(resolution_id, [])
                return resolutions[0] if resolutions else None
            return None

        @staticmethod
        def get_formatted_resolution_list():
            """
            从分辨率映射中生成格式化的分辨率字符串列表，用于UI显示
            格式为: "类型 宽度x 高度 @ 刷新率Hz"

            Returns:
                包含格式化分辨率字符串的列表
            """
            formatted_list = []

            # 添加DMT分辨率
            for res_id, res_info in UCDEnum.TimingInfo.dmt_resolution_map.items():
                formatted_str = f"DMT {res_info['width']}x {res_info['height']} @ {int(res_info['refresh_rate'])}Hz"
                formatted_list.append(formatted_str)

            # 添加CTA分辨率
            for res_id, res_info in UCDEnum.TimingInfo.cta_resolution_map.items():
                formatted_str = f"CTA {res_info['width']}x {res_info['height']} @ {int(res_info['refresh_rate'])}Hz"
                formatted_list.append(formatted_str)

            # 添加CVT分辨率 (只取每个ID的第一个)
            for res_id, res_list in UCDEnum.TimingInfo.cvt_resolution_map.items():
                for res_info in res_list:
                    note = f" {res_info.get('note', '')}" if "note" in res_info else ""
                    formatted_str = f"CVT {res_info['width']}x {res_info['height']} @ {int(res_info['refresh_rate'])}Hz{note}"
                    formatted_list.append(formatted_str)

            # 添加OVT分辨率 (只取每个ID的第一个)
            for res_id, res_list in UCDEnum.TimingInfo.ovt_resolution_map.items():
                for res_info in res_list:
                    formatted_str = f"OVT {res_info['width']}x {res_info['height']} @ {int(res_info['refresh_rate'])}Hz"
                    formatted_list.append(formatted_str)

            # 排序并去重
            return sorted(list(set(formatted_list)))

    class SignalFormat:
        """信号格式相关枚举"""

        class GammaType:
            """Gamma 类型枚举"""

            GAMMA_22 = "2.2"
            GAMMA_24 = "2.4"
            GAMMA_26 = "2.6"

            @staticmethod
            def get_list():
                return ["2.2", "2.4", "2.6"]

            @staticmethod
            def get_gamma_value(gamma_str):
                """将 Gamma 字符串转换为数值"""
                gamma_map = {"2.2": 2.2, "2.4": 2.4, "2.6": 2.6}
                return gamma_map.get(gamma_str, 2.2)

        class DataRange:
            """数据范围枚举"""

            FULL = "Full"
            LIMITED = "Limited"

            @staticmethod
            def get_list():
                return ["Full", "Limited"]

        class BitDepth:
            """编码位深枚举"""

            BIT_8 = "8bit"
            BIT_10 = "10bit"
            BIT_12 = "12bit"

            @staticmethod
            def get_list():
                return ["8bit", "10bit", "12bit"]

            @staticmethod
            def get_bit_value(bit_str):
                """将位深字符串转换为数值"""
                bit_map = {"8bit": 8, "10bit": 10, "12bit": 12}
                return bit_map.get(bit_str, 8)

        class HDRMetadata:
            """HDR Metadata 参数"""

            # MaxCLL (Maximum Content Light Level) - 最大内容亮度级别
            MAX_CLL_DEFAULT = 1000
            MAX_CLL_OPTIONS = [400, 600, 800, 1000, 1200, 1500, 2000, 4000]

            # MaxFALL (Maximum Frame Average Light Level) - 最大帧平均亮度级别
            MAX_FALL_DEFAULT = 400
            MAX_FALL_OPTIONS = [200, 300, 400, 500, 600, 800, 1000]

            @staticmethod
            def get_maxcll_list():
                return [400, 600, 800, 1000, 1200, 1500, 2000, 4000]

            @staticmethod
            def get_maxfall_list():
                return [200, 300, 400, 500, 600, 800, 1000]

        class OutputFormat:
            """输出色彩格式枚举（决定信号是 RGB 还是 YCbCr 格式）"""

            RGB = "RGB"
            YCBCR_422 = "YCbCr 4:2:2"
            YCBCR_444 = "YCbCr 4:4:4"
            YCBCR_420 = "YCbCr 4:2:0"
            Y_ONLY = "Y Only"
            IDO_DEFINED = "IDO Defined"
            RAW = "RAW"
            DSC = "DSC"

            @staticmethod
            def get_list():
                return ["RGB", "YCbCr 4:4:4", "YCbCr 4:2:2", "YCbCr 4:2:0",
                        "Y Only", "IDO Defined", "RAW", "DSC"]

            @staticmethod
            def is_ycbcr(format_str):
                return "YCbCr" in (format_str or "")

            @staticmethod
            def get_format_key(format_str):
                """将显示字符串转换为 UCDEnum.ColorInfo.get_color_format() 的 key"""
                fmt_map = {
                    "RGB": "rgb",
                    "YCbCr 4:4:4": "ycbcr444",
                    "YCbCr 4:2:2": "ycbcr422",
                    "YCbCr 4:2:0": "ycbcr420",
                    "Y Only": "yonly",
                    "IDO Defined": "ido_defined",
                    "RAW": "raw",
                    "DSC": "dsc",
                }
                return fmt_map.get(format_str, "rgb")

