# @Author    : Rocky
# @File      : ContentSecurityObject.py
# @Time      : 2023/8/18 11:02
from alibabacloud_green20220302.client import Client as Green20220302Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_green20220302 import models as green_20220302_models
from alibabacloud_tea_util import models as util_models
from Ansjer.config import ALI_ACCESS_KEY_ID, ALI_ACCESS_KEY_SECRET, LOGGER

TEXT_ILLEGAL_LABEL_LIST = ['political_content', 'profanity', 'contraband', 'sexual_content', 'violence',
                           'negative_content', 'religion', 'cyberbullying']
IMAGE_ILLEGAL_LABEL_LIST = ['pornographic_adultContent', 'sexual_suggestiveContent', 'political_politicalFigure_1',
                            'violent_blood', 'contraband_drug']


class ContentSecurity:
    """
    阿里云内容安全服务类
    """
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Green20220302Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 必填，您的 AccessKey ID,
            access_key_id=ALI_ACCESS_KEY_ID,
            # 必填，您的 AccessKey Secret,
            access_key_secret=ALI_ACCESS_KEY_SECRET
        )
        # Endpoint 请参考 https://api.aliyun.com/product/Green
        config.endpoint = f'green-cip.cn-shanghai.aliyuncs.com'
        return Green20220302Client(config)

    def text_review(self, service, service_parameters):
        """
        文本审核
        @param service: 审核服务类型
        @param service_parameters: 审核服务参数集
        @return: bool, True: 审核通过, False: 审核不通过
        """
        client = self.create_client()
        text_moderation_request = green_20220302_models.TextModerationRequest(service, service_parameters)
        runtime = util_models.RuntimeOptions()
        res = client.text_moderation_with_options(text_moderation_request, runtime)
        print(res)
        if res.status_code != 200:
            return False
        labels = res.body.data.labels
        labels_list = labels.split(',')
        for label in labels_list:
            if label in TEXT_ILLEGAL_LABEL_LIST:
                return False
            return True

    def image_review(self, service, service_parameters):
        """
        图片审核
        @param service: 审核服务类型
        @param service_parameters: 审核服务参数集
        @return: bool, True: 审核通过, False: 审核不通过
        """
        client = self.create_client()
        image_moderation_request = green_20220302_models.ImageModerationRequest(service, service_parameters)
        runtime = util_models.RuntimeOptions()
        res = client.image_moderation_with_options(image_moderation_request, runtime)
        print(res)
        LOGGER.info('图片审核响应内容:{}'.format(res))
        if res.status_code != 200:
            return False
        # 获取审核结果
        result = res.body
        if result.code != 200:
            return False
        result_list = result.data.result
        # 配到风险标签且置信分高于80时返回False
        for result in result_list:
            if result.label in IMAGE_ILLEGAL_LABEL_LIST:
                if result.confidence >= 80:
                    return False
        return True
