class RatingValue:
    """
    媒体分级；
    香港标准
    第Ⅰ级：适合任何年龄的人观看；
    第Ⅱ级：13岁以下不宜观看
    第ⅡA级：13岁以下，建议有家长陪同观看
    第ⅡB级：18岁以下，建议有家长陪同观看
    第Ⅲ级：18岁以上。
    """
    I = "Ⅰ"  # 年龄不限
    II = "Ⅱ"  # 13岁以上
    IIA = "ⅡA"  # 13岁以上
    IIB = "ⅡB"  # 18岁以上
    III = "Ⅲ"  # 18岁以上

    L1 = "L1"  # 0-1岁
    L2 = "L2"  # 1-3岁
    L3 = "L3"  # 4-6岁
    L4 = "L4"  # 7-10岁
    L5 = "L5"  # 11-13岁

    @staticmethod
    def rating_map():
        return {
            RatingValue.L1: "0-1岁",
            RatingValue.L2: "1-3岁",
            RatingValue.L3: "4-6岁",
            RatingValue.L4: "7-10岁",
            RatingValue.L5: "11-13岁",
            RatingValue.I: "年龄不限",
            RatingValue.II: "13岁以上",
            RatingValue.IIA: "13岁以下",
            RatingValue.IIB: "18岁以下",
            RatingValue.III: "18岁以上"
        }

    @staticmethod
    def rating_2_json():
        return [
            {"value": RatingValue.I, "label": "适合任何年龄的人观看"},
            {"value": RatingValue.II, "label": "13岁以下不宜观看"},
            {"value": RatingValue.IIA, "label": "13岁以下，建议有家长陪同观看"},
            {"value": RatingValue.IIB, "label": "18岁以下，建议有家长陪同观看"},
            {"value": RatingValue.III, "label": "18岁以上"},
            {"value": RatingValue.L1, "label": "0-1岁"},
            {"value": RatingValue.L2, "label": "1-3岁"},
            {"value": RatingValue.L3, "label": "4-6岁"},
            {"value": RatingValue.L4, "label": "7-10岁"},
            {"value": RatingValue.L5, "label": "11-13岁"}
        ]


class TaskStatusValue:
    """注入任务状态"""
    TRANS_CODE_PENDING = 1  # 转码已发起
    TRANS_CODE_TRANSFERING = 2  # 转码中
    TRANS_CODE_COMPLETED = 3  # 转码完成
    TRANS_CODE_FAILED = 4  # 转码失败

    FILE_PENDING = 11  # 介质注入已发起
    FILE_TRANSFERING = 12  # 介质注入中
    FILE_COMPLETED = 13  # 介质注入完成
    FILE_FAILED = 14  # 介质注入失败

    INFO_PENDING = 21  # 信息注入已发起
    INFO_TRANSFERING = 22  # 信息注入中
    INFO_COMPLETED = 23  # 信息注入完成，目前认为信息注入完成为整个注入过程完成
    INFO_FAILED = 24  # 信息注入失败

    @staticmethod
    def pending():
        return [TaskStatusValue.TRANS_CODE_PENDING, TaskStatusValue.FILE_PENDING, TaskStatusValue.INFO_PENDING]

    @staticmethod
    def failed():
        return [TaskStatusValue.TRANS_CODE_FAILED, TaskStatusValue.FILE_FAILED, TaskStatusValue.INFO_FAILED]

    @staticmethod
    def stop_injector():
        """
        涉及到转码，介质注入，信息注入中停止注入的情况，0为异常状态
        """
        return TaskStatusValue.failed() + [TaskStatusValue.INFO_TRANSFERING, 0]

    @staticmethod
    def occupied_bandwidth():
        """占用下载带宽"""
        return [TaskStatusValue.TRANS_CODE_PENDING, TaskStatusValue.FILE_PENDING]


class ContentTypeValue:
    """内容类型"""
    POSITIVE = 1  # 正片
    CLIP = 2  # 片花
    TRAILER = 3  # 预告片
    OTHER = 4  # 其它

    @staticmethod
    def trans(content_type):
        """1:正片 2:预览片"""
        if content_type == ContentTypeValue.POSITIVE:
            return 1
        else:
            return 2

    @staticmethod
    def trans_hebeiyidong(content_type):
        """
        1 正片
        2 预告
        3 片段
        4 资讯
        5 全片
        6 连载
        7 专题
        8 精编
        9 改编
        10 花絮
        99 其他
        """
        if content_type == ContentTypeValue.POSITIVE:
            return 1
        elif content_type == ContentTypeValue.CLIP:
            return 10
        elif content_type == ContentTypeValue.TRAILER:
            return 2
        else:
            return 99


class DefinitionValue:
    """
    2 流畅 320P 558(bit) Smooth
    3 标清 480P 1324(bit) SD
    4 高清 720P 1460(bit) HD
    5 全高清 1080P 2733(bit) Ultraclear
    10 蓝光 4k 5466(bit) Bluray
    """
    P320 = 2  # 流畅 320P
    P480 = 3  # 标清 480P
    P720 = 4  # 高清 720P
    P1080 = 5  # 全高清 1080P
    P3840 = 8  # 3840x2160
    P4096 = 9  # 4096x2160
    K4 = 10  # 蓝光 4K

    @staticmethod
    def get_cdn_definition():
        return (
            (DefinitionValue.P320, "流畅 320P"),
            (DefinitionValue.P480, "标清 480P"),
            (DefinitionValue.P720, "高清 720P"),
            (DefinitionValue.P1080, "全高清 1080P"),
            (DefinitionValue.P3840, "4K 3840P"),
            (DefinitionValue.P4096, "4K 4096P"),
            (DefinitionValue.K4, "蓝光 4K"),
        )

    @staticmethod
    def get_ext_definition():
        return (
            {"name": "流畅320P", "value": 1},
            {"name": "标清480P", "value": 2},
            {"name": "高清720P", "value": 3},
            {"name": "超高清1080P", "value": 4},
            {"name": "4K", "value": 5}
        )


class StoragePlatformValue:
    TYPE_CODE_DICT = {99: "通用", 98: "通用-m3u8", 97: "通用-mp4", 21: "安徽电信影视", 16: "山西移动", 2: "湖北移动",
                      1: "银河", 101: "银河-m3u8", 26: "新疆IPTV", 261: "新疆IPTV-m3u8", 34: "重庆移动",
                      341: "重庆移动-m3u8",
                      210: "安徽电信影视-m3u8", 161: "山西移动-m3u8", 201: "湖北移动-m3u8",
                      263: "新疆IPTV电信", 14: "甘肃移动", 141: "甘肃移动-m3u8",
                      97: "切片中",
                      37: "江苏移动", 371: "江苏移动-m3u8", 46: "江西移动", 20: "西藏电信1",
                      4: "广东移动"}
    COMMON = 99  # 通用
    M3U8 = 98  # m3u8平台
    HLS_PROCESS = 97  # 切片过程
    TYPE_CODE_TO_CODE_UPDATE = {
        99: 98, 37: 371,
        1: 101, 21: 210, 16: 161, 2: 201, 26: 261, 34: 341, 14: 141
    }
    TYPE_CODE_TO_CODE_RESET = dict(zip(TYPE_CODE_TO_CODE_UPDATE.values(), TYPE_CODE_TO_CODE_UPDATE.keys()))


class PlatformTelecomValue:
    Telecom_DICT = {1: "移动", 2: "联调", 3: "电信"}


class LspCommonValue:
    LSPMOVIETAGLIST = ("ANHUIDIANXINXIN", "JIANGSUYD", "SHANXIYDGTC", "SHANXIYIDONGGTCS")


class PlatformAliasValue:
    SHANXIYIDONG_ALIAS = "SHANXIYIDONG"
    SHANXIYIDONG = "16"
    NINGXIAYIDONG = "09"
    SHANXIYIDONGGTCS = "46"
    mapping = {16: "SHANXIYIDONG", 9: "NINGXIAYIDONG", 46: "SHANXIYIDONGGTCS"}
    values = (SHANXIYIDONG, NINGXIAYIDONG)
    LSPALAISMAP = {"gitvSxcmcc6602": "SHANXIYDGTC", "SNTYMZ": "SHANXITONGYI", "Cqgdydbk": "CHONGQINGYDWL",
                   "SYWH": "YUNNANYIDONG", "gitvJscmcc6712": "JIANGSUYD", "PANDADXJYOTT": "GUANGXIDIANXIN",
                   "PANDANMYD": "QSHINMGYDPA", "JS_TV_COS": "JIANGSUYDWL", "JX_TV_COS": "JIANGXIYD",
                   "SYWHzte": "JIANGXIYD", "SYWHOTT": "JIANGXIYD", "NMIPTVSH": "NEIMENGYDIPTV"}

    @classmethod
    def get_alias(cls, num):
        return cls.mapping.get(int(num))

    @classmethod
    def is_exits(cls, num):
        return num in cls.values


class TaskModelActionValue:
    REGISTER = 1
    UPDATE = 2
    DELETE = 3
    ACTIVE = 4
    UN_ACTIVE = 5

    ACTIVE_NO_EXIST = 400
