from hub import methods, Global

import threading
import time
import json
import os

# --- for linux
# save_dir = f"/home/server/logs"

# --- for windows
# save_dir = r'C:\SRI-DINO.Server-py\logs'  # sri内网测试环境
save_dir = r'C:\logs'  # sri内网测试环境

class LocalClass(object):
    last_log_key = str()

def method_c001(client, userdata, message):
    """消息处理方法"""
    """
    {
        'basControl': {
            'directSwitch': 1,
            'eStop': 0,
            'gearControl': 0,
            'hazardLight': 0,
            'keyStatus': 0,
            'parkControl': 0,
            'silencedAlarm': 0,
            'travelLight': 2,
            'travelMode': 0,
            'vehicleHorn': 0
        },
        'cockpitID': 'Cop001',
        'driverControl': {
            'accPedal': '0 AND 0 || 0 AND -1',
            'brakePedal': '2 AND 2',
            'steeringWheel': '1 AND 0',
            'turnMode': 0,
            'turnSignal': 0
        },
        'errCode': {
            'errAccPedal': 0,
            'errBasOperation': '',
            'errBrakePedal': 0,
            'errEndTool': 0,
            'errHandle': 0,
            'errOther': '',
            'errSteeringWheel': 0
        },
        'taskControl': {
            'baseLegControl': '103 AND 24',
            'baseLegSwitch': 0,
            'bypassSwitch': 0,
            'cabLift': 0,
            'coopSignal': 3,
            'enableHydraulic': 1,
            'endJoint': '1 AND 0',
            'esCabLift': 0,
            'suckerSelect': 0,
            'taskJoint_1': '5 AND 0',
            'taskJoint_2': '0 AND 0',
            'taskJoint_3': '0 AND 0',
            'toolControl': '0 AND 0',
            'workLight': 0
        },
        'timeStamp': 576301601,
        'userID': 'Ego',
        'vehicleID': '0538'
    }
    """
    # --- print ---
    methods.debug_log(f"MessageListenerC001|19", f"#message.payload: {message.payload}")
    log_dict = json.loads(message.payload)
    # try:
    #     log_dict = json.loads(message.payload)
    #     methods.debug_log(f"MessageListenerC001|19", f"#message.payload: {repr(log_dict)}")
    # except Exception as e:
    #     pass

    # --- save ---
    file_name = methods.now_string('v001-%Y-%m-%d-%H.log')
    log_file_path = os.path.join(save_dir, file_name)
    log_dict = json.loads(message.payload)
    log_list = [

        f"timestamp: {methods.ts_to_string(int(log_dict.get('timestamp')) / 1000)}",  # 时间
        f"userID: {log_dict.get('userID')}",  # 用户id
        f"VehicleID: {log_dict.get('VehicleID')}",  # 车id

    ]



    # --- check ---
    log_key = '-'.join(log_list[1:])
    if LocalClass.last_log_key and LocalClass.last_log_key == log_key:
        # methods.debug_log(f"MessageListener24", f"#86: {LocalClass.last_log_key == log_key}")
        return

    # --- update --
    LocalClass.last_log_key = log_key

    # --- save ---
    methods.debug_log(f"MessageListener24", f"#log_list: {log_list}")
    methods.write_text(log_file_path, ' | '.join(log_list) + '\n', 'a')


def subscribe_c001():
    """"""
    Global.emqx.start_subscribe_loop(
        decorate_method=method_c001,
        subscribe_topic='Cockpit/CanBus/CanId001/Cop001'
    )