from .opf_utils import *


class OPFParametersParser:
    @staticmethod
    def parse(opf_id: int, *args) -> list:
        if opf_id in [1]:
            return parse_link_training(args[3])
        if opf_id in [2]:
            return parse_video_mode_2(args[3])
        if opf_id in [3, 4, 5, 7, 8, 11, 12, 13, 14, 15, 16, 17, 101, 102, 104, 105, 106, 121, 122, 123, 145, 150, 152, 161]:
            return parse_message(args[1])
        if opf_id in [6]:
            return parse_video_mode_6(args[1], args[3])
        if opf_id in [9]:
            return parse_video_mode_9(args[3], args[1])
        if opf_id in [10]:
            return parse_opf_10(args[3])
        if opf_id in [18]:
            return parse_video_mode_18(args[3])
        if opf_id in [19]:
            return parse_video_mode_19(args[3])
        if opf_id in [20]:
            return parse_video_mode_20(args[3], args[1])
        if opf_id in [21]:
            return parse_opf_21(args[3])
        if opf_id in [103]:
            return parse_video_mode_103(args[3])
        if opf_id in [120]:
            return parse_video_mode_120(args[3])
        if opf_id in [140]:
            return parse_video_mode_140(args[3])
        if opf_id in [141]:
            return parse_video_mode_141(args[3])
        if opf_id in [142]:
            return [args[1]]
        if opf_id in [143]:
            return parse_video_mode_143(args[3])
        if opf_id in [144]:
            return parse_video_mode_144(args[3])
        if opf_id in [151]:
            return parse_video_mode_103(args[3])
        else:
            raise ValueError(f"Received OPF request with unknown code: {opf_id}")
