import json
import logging
import time
import urllib
from urllib.parse import urlencode
import hmac
import hashlib
import base64
import requests
import hytest

def dingding_send_message(error_log_url,ding_type):
    """
    发送钉钉机器人消息
    参考接口文档:https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages#title-7fs-kgs-36x

    :param text: 消息文本
    :param mobile: 需要@的手机号列表
    :param ding_type: 钉钉机器人类型,用于选择不同的 Webhook URL 和密钥
    """
    # 记录调用此函数的日志
    logging.info("开始构建并发送钉钉机器人消息")
    # 钉钉机器人的 Webhook URL 和密钥(测试环境)
    webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=7fbf40798cad98b1b5db55ff844ba376b1816e80c5777e6f47ae1d9165dacbb4'
    secret = 'SEC610498ed6261ae2df1d071d0880aaa70abf5e67efe47f75a809c1f2314e0dbd6'
    # 这是错的
    # secret = 'SEC610498ed6261ae2df1d071d0880aaa70abf5e67efe47f75a809c1f2314e0dbd612211221'
    # 日志类型:1.预定系统对内服务;2.预定系统对外服务
    log_type = ''

    if ding_type ==  '235标准预定-对内服务服务监测':
        log_type = '235标准预定-对内服务日志出现异常'

    elif ding_type == '235标准预定-对外服务服务监测':
        log_type = '235标准预定-对外服务日志出现异常'

    elif ding_type == '展厅预定系统-对内服务服务监测':
        log_type = '展厅预定-对内服务服务监测'

    elif ding_type == '展厅预定系统-对外服务服务监测':
        log_type = '展厅预定-对外服务日志出现异常'

    elif ding_type == '展厅运维集控系统-服务监测':
        log_type = '展厅运维集控系统-服务监测'

    logging.info(f"预定服务日志类型:{log_type}")

    # 生成时间戳
    timestamp = str(round(time.time() * 1000))

    # 生成签名
    secret_enc = secret.encode('utf-8')
    string_to_sign = f'{timestamp}\n{secret}'
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

    # 构建最终的 Webhook URL
    params = {
        'access_token': webhook_url.split('=')[1],
        'timestamp': timestamp,
        'sign': sign
    }
    encoded_params = urllib.parse.urlencode(params)
    final_webhook_url = f'https://oapi.dingtalk.com/robot/send?{encoded_params}'

    # 记录最终的 Webhook URL
    logging.info(f"钉钉机器人Webhook URL: {final_webhook_url}")

    # 构建消息体
    headers = {'Content-Type': 'application/json'}
    message = {
        'msgtype': 'link',
        'link': {
            'title': log_type,
            'messageUrl': error_log_url,
            'text': "请点击链接,尽快排查处理!!!"
        },
        "at": {
            "atMobiles": "13724387318",
            "isAtAll": True
        }
    }

    try:
        # 发送 POST 请求
        response = requests.post(final_webhook_url, data=json.dumps(message), headers=headers)

        # 检查响应状态码
        if response.status_code == 200:
            logging.info('消息发送成功!')
            logging.info(f'响应内容: {response.text}')
        else:
            logging.error(f'消息发送失败,状态码: {response.status_code}')
            logging.error(f'响应内容: {response.text}')
    except requests.exceptions.RequestException as e:
        logging.error(f'请求异常: {e}')