# -*- coding: utf-8 -*-
# 编码格式
UTF_8 = "utf-8"

# 文件读模式
R = 'r'
ON_OR = "_on_or_"
ON_AI = "_on_ai_"
MP4 = ".mp4"
# 初始化进度
init_progess = "0.0000"
# 进度100%
success_progess = "1.0000"

# 拉流每帧图片缩小宽度大小限制, 大于1400像素缩小一半, 小于1400像素不变
width = 1400

COLOR = (
    [0, 0, 255],
    [255, 0, 0],
    [211, 0, 148],
    [0, 127, 0],
    [0, 69, 255],
    [0, 255, 0],
    [255, 0, 255],
    [0, 0, 127],
    [127, 0, 255],
    [255, 129, 0],
    [139, 139, 0],
    [255, 255, 0],
    [127, 255, 0],
    [0, 127, 255],
    [0, 255, 127],
    [255, 127, 255],
    [8, 101, 139],
    [171, 130, 255],
    [139, 112, 74],
    [205, 205, 180])

ONLINE = "online"
OFFLINE = "offline"
PHOTO = "photo"
RECORDING = "recording"

ONLINE_START_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start"]
    },
    "pull_url": {
        'type': 'string',
        'required': True,
        'empty': False,
        'maxlength': 255
    },
    "push_url": {
        'type': 'string',
        'required': True,
        'empty': False,
        'maxlength': 255
    },
    "logo_url": {
        'type': 'string',
        'required': False,
        'nullable': True,
        'maxlength': 255
    },
    "models": {
        'type': 'list',
        'required': True,
        'nullable': False,
        'minlength': 1,
        'maxlength': 3,
        'schema': {
            'type': 'dict',
            'required': True,
            'schema': {
                "code": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "categories",
                    'regex': r'^[a-zA-Z0-9]{1,255}$'
                },
                "is_video": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "is_image": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "categories": {
                    'type': 'list',
                    'required': True,
                    'dependencies': "code",
                    'schema': {
                        'type': 'dict',
                        'required': True,
                        'schema': {
                            "id": {
                                'type': 'string',
                                'required': True,
                                'empty': False,
                                'regex': r'^[a-zA-Z0-9]{0,255}$'},
                            "config": {
                                'type': 'dict',
                                'required': False,
                                'dependencies': "id",
                            }
                        }
                    }
                }
            }
        }
    }
}

ONLINE_STOP_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["stop"]
    }
}

OFFLINE_START_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start"]
    },
    "push_url": {
        'type': 'string',
        'required': True,
        'empty': False,
        'maxlength': 255
    },
    "pull_url": {
        'type': 'string',
        'required': True,
        'empty': False,
        'maxlength': 255
    },
    "logo_url": {
        'type': 'string',
        'required': False,
        'nullable': True,
        'maxlength': 255
    },
    "models": {
        'type': 'list',
        'required': True,
        'maxlength': 3,
        'minlength': 1,
        'schema': {
            'type': 'dict',
            'required': True,
            'schema': {
                "code": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "categories",
                    'regex': r'^[a-zA-Z0-9]{1,255}$'
                },
                "is_video": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "is_image": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "categories": {
                    'type': 'list',
                    'required': True,
                    'dependencies': "code",
                    'schema': {
                        'type': 'dict',
                        'required': True,
                        'schema': {
                            "id": {
                                'type': 'string',
                                'required': True,
                                'empty': False,
                                'regex': r'^[a-zA-Z0-9]{0,255}$'},
                            "config": {
                                'type': 'dict',
                                'required': False,
                                'dependencies': "id",
                            }
                        }
                    }
                }
            }
        }
    }
}

OFFLINE_STOP_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["stop"]
    }
}

IMAGE_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start"]
    },
    "logo_url": {
        'type': 'string',
        'required': False,
        'nullable': True,
        'maxlength': 255
    },
    "image_urls": {
        'type': 'list',
        'required': True,
        'minlength': 1,
        'schema': {
            'type': 'string',
            'required': True,
            'empty': False,
            'maxlength': 5000
        }
    },
    "models": {
        'type': 'list',
        'required': True,
        'schema': {
            'type': 'dict',
            'required': True,
            'schema': {
                "code": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "categories",
                    'regex': r'^[a-zA-Z0-9]{1,255}$'
                },
                "is_video": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "is_image": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "code",
                    'allowed': ["0", "1"]
                },
                "categories": {
                    'type': 'list',
                    'required': True,
                    'dependencies': "code",
                    'schema': {
                        'type': 'dict',
                        'required': True,
                        'schema': {
                            "id": {
                                'type': 'string',
                                'required': True,
                                'empty': False,
                                'regex': r'^[a-zA-Z0-9]{0,255}$'},
                            "config": {
                                'type': 'dict',
                                'required': False,
                                'dependencies': "id",
                            }
                        }
                    }
                }
            }
        }
    }
}

RECORDING_START_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start"]
    },
    "pull_url": {
        'type': 'string',
        'required': True,
        'empty': False,
        'maxlength': 255
    },
    "push_url": {
        'type': 'string',
        'required': False,
        'empty': True,
        'maxlength': 255
    },
    "logo_url": {
        'type': 'string',
        'required': False,
        'nullable': True,
        'maxlength': 255
    }
}

RECORDING_STOP_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["stop"]
    }
}

PULL2PUSH_START_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start"]
    },
    "video_urls": {
        'type': 'list',
        'required': True,
        'nullable': False,
        'schema': {
            'type': 'dict',
            'required': True,
            'schema': {
                "id": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "pull_url",
                    'regex': r'^[a-zA-Z0-9]{1,255}$'
                },
                "pull_url": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "push_url",
                    'regex': r'^(https|http|rtsp|rtmp|artc|webrtc|ws)://\w.+$'
                },
                "push_url": {
                    'type': 'string',
                    'required': True,
                    'empty': False,
                    'dependencies': "id",
                    'regex': r'^(https|http|rtsp|rtmp|artc|webrtc|ws)://\w.+$'
                }
            }
        }
    }
}
PULL2PUSH_STOP_SCHEMA = {
    "request_id": {
        'type': 'string',
        'required': True,
        'empty': False,
        'regex': r'^[a-zA-Z0-9]{1,36}$'
    },
    "command": {
        'type': 'string',
        'required': True,
        'allowed': ["start", "stop"]
    },
    "video_ids": {
        'type': 'list',
        'required': False,
        'nullable': True,
        'schema': {
            'type': 'string',
            'required': True,
            'empty': False,
            'regex': r'^[a-zA-Z0-9]{1,255}$'
        }
    }
}
