#include "mqtt_report/fault_codes.h"

ErrorCodeSet vehicle_error_code; // 整车错误码

// 根据错误码列表，生成错误上报json
std::string generateFaultJson(int code, const std::string &vin, int64_t timestamp)
{
    auto it = faultMap.find(code);
    if (it == faultMap.end())
    {
        throw std::runtime_error("错误码不存在");
    }

    const FaultInfo &info = it->second;

    ordered_json j;
    j["vin"] = vin;
    j["deviceName"] = info.subsystem;
    j["code"] = code;
    j["msg"] = info.error_name;
    j["level"] = info.level;
    j["timestamp"] = timestamp;

    return j.dump(4);
}

// 修改map里错误码对应的错误等级
bool updateFaultLevel(int code, int newLevel)
{
    auto it = faultMap.find(code);
    if (it == faultMap.end())
    {
        return false;
    }

    it->second.level = newLevel;
    return true;
}

const uint8_t epsErrorCode[18] = {0x10, 0x14, 0x12, 0x21, 0x22, 0x23, 0x24, 0x25, 0x32, 0x33, 0x35, 0x37, 0x43, 0x46, 0x51, 0x55, 0x61, 0x62};

std::unordered_map<int, FaultInfo> faultMap = {
    {1001, {"BMS", "BMS_TEMP_HIGH_ERR", "温度过高", 0}},
    {1002, {"BMS", "BMS_TEMP_LOW_ERR", "温度过低", 0}},
    {1003, {"BMS", "BMS_TEMP_DIFF_BIG_ERR", "温度差过大", 0}},
    {1004, {"BMS", "BMS_VOL_HIGH_ERR", "单体电压过高", 0}},
    {1005, {"BMS", "BMS_VOL_LOW_ERR", "单体电压过低", 0}},
    {1006, {"BMS", "BMS_VOL_DIFF_OVER_ERR", "电梯压差过大", 0}},
    {1007, {"BMS", "BMS_CHA_CURR_OVER_ERR", "充电电流过大", 0}},
    {1008, {"BMS", "BMS_DISCHA_CURR_OVER_ERR", "放电电流过大", 0}},
    {1009, {"BMS", "BMS_ISOLATION_ERR", "绝缘异常", 0}},
    {1010, {"BMS", "BMS_CHA_POW_OVER_ERR", "充电功率过大", 0}},
    {1011, {"BMS", "BMS_DISCHA_POW_OVER_ERR", "放电功率过大", 0}},
    {1012, {"BMS", "BMS_SOC_LOW_ERR", "电池容量低", 0}},
    {1013, {"BMS", "BMS_CONT_ADHENSION_ERR", "主接触器粘连", 0}},
    {1014, {"BMS", "BMS_CONT_INVALID_ERR", "主接触器失效", 0}},
    {1015, {"BMS", "BMS_PRECHA_ERR", "预充电失败", 0}},
    {1016, {"BMS", "BMS_INTER_COM_ERR", "内部通信故障", 0}},
    {1017, {"BMS", "BMS_EXTER_COM_ERR", "外部通信故障", 0}},
    {1018, {"BMS", "BMS_DISCHA_VOL_LOW_ERR", "放电12V系统电压低", 0}},
    {1019, {"BMS", "BMS_CHA_VOL_LOW_ERR", "充电12V系统电压低", 0}},
    {1020, {"BMS", "BMS_HIGH_LEVEL_ERR", "最高故障等级", 0}},
    {1021, {"BMS", "BMS_CHA_TEMP_LOW_ERR", "充电温度过低", 0}},
    {1022, {"BMS", "BMS_WIRES_ERR", "采集线束故障", 0}},
    {1023, {"BMS", "BMS_TEMP_SENSOR_ERR", "温度检测故障", 0}},
    {1024, {"BMS", "BMS_CAP_WARN_INFO_ERR", "容量预警信息", 0}},
    {1025, {"BMS", "BMS_INTER_TEMP_ERR", "内部温度故障", 0}},
    {1026, {"BMS", "BMS_HEATING_MOD_ERR", "加热模块故障", 0}},
    {1027, {"BMS", "BMS_CHAR_STATUS_ERR", "充电枪状态", 0}},
    {1028, {"BMS", "BMS_HALL_ZERO_ERR", "霍尔零点故障", 0}},

    {1101, {"MCU", "MCU_ANGLE_SENSOR_ERR", "控制器辨识角度传感器失败", 0}},
    {1102, {"MCU", "MCU_OVER_VOL_ERR", "过压", 0}},
    {1103, {"MCU", "MCU_UNDER_VOL_ERR", "低压", 0}},
    {1104, {"MCU", "MCU_STALL_ERR", "堵转", 0}},
    {1105, {"MCU", "MCU_VOLTAGE_ERR", "电压错误", 0}},
    {1106, {"MCU", "MCU_OVER_TEMP_ERR", "控制器过温错误", 0}},
    {1107, {"MCU", "MCU_PEDAL_START_ERR", "启动时踏板错误", 0}},
    {1108, {"MCU", "MCU_RESET_ERR", "控制器内部进行了一次复位", 0}},
    {1109, {"MCU", "MCU_THROTTLE_ERR", "控制器启动时或者运行过程中霍尔式油门踏板短路或断路", 0}},
    {1110, {"MCU", "MCU_ANGLE_SENSOR_ERR", "角度传感器故障", 0}},
    {1111, {"MCU", "MCU_MOTOR_OVER_TEMP_ERR", "电机温度过温", 0}},
    {1112, {"MCU", "MCU_CUR_SENSOR_ERR", "电流传感器故障", 0}},

    {1201, {"EPS", "EPS_NO_EXTER_OSC_ERR", "没有外部晶振", 0}},
    {1202, {"EPS", "EPS_EEPROM_ERR", "EEPROM读写故障", 0}},
    {1203, {"EPS", "EPS_MISS_STEERING_ANGLE_ERR", "未写入方向盘角度中点", 0}},
    {1204, {"EPS", "EPS_MAIN_TORQUE_BREAK_ERR", "主力矩传感器断开", 0}},
    {1205, {"EPS", "EPS_MAIN_TORQUE_OUTPUT_ERR", "主力矩传感器输出异常", 0}},
    {1206, {"EPS", "EPS_SUB_TORQUE_BREAK_ERR", "副力矩传感器断开", 0}},
    {1207, {"EPS", "EPS_SUB_TORQUE_OUTPUT_ERR", "副力矩传感器输出异常", 0}},
    {1208, {"EPS", "EPS_MS_TORQUE_DIFF_OVER_ERR", "主副力矩差异过大", 0}},
    {1209, {"EPS", "EPS_MOTOR_NO_ASSIST_ERR", "电机无助力(Q轴无反馈)", 0}},
    {1210, {"EPS", "EPS_OVER_CURR_ERR", "过电流", 0}},
    {1211, {"EPS", "EPS_MOTOR_CURR_ERR", "电机电流异常", 0}},
    {1212, {"EPS", "EPS_BUS_CURR_ERR", "母线电流异常", 0}},
    {1213, {"EPS", "EPS_MOTOR_VOL_ERR", "电机端电压异常", 0}},
    {1214, {"EPS", "EPS_THERMAL_ERR", "热保护", 0}},
    {1215, {"EPS", "EPS_STEERING_ANGLE_OVER_ERR", "方向盘角度超限", 0}},
    {1216, {"EPS", "EPS_XOR_CHECK_ERR", "异或校验错误", 0}},
    {1217, {"EPS", "EPS_MIN_GEAR_BREAK_ERR", "小齿轮角度传感器断开", 0}},
    {1218, {"EPS", "EPS_MED_GEAR_BREAK_ERR", "中齿轮角度传感器断开", 0}},

    {1701, {"VCU", "VCU_EMERGENCY_STOP_ERR", "急停信号", 0}},
    {1702, {"VCU", "VCU_EEPROM_ERR", "EEPROM故障", 0}},
    {1703, {"VCU", "VCU_BATTERY_VOL_VERY_LOW_ERR", "电池电压非常低错误", 0}},
    {1704, {"VCU", "VCU_BATTERY_VOL_HIGH_ERR", "电池电压高错误", 0}},
    {1705, {"VCU", "VCU_PRECHARGE_1_ERR", "预充1错误", 0}},
    {1706, {"VCU", "VCU_KEY_SWITCH_VOL_ERR", "钥匙开关电压错误", 0}},
    {1707, {"VCU", "VCU_CPU_12V_ERR", "给CPU的12V电压错误", 0}},
    {1708, {"VCU", "VCU_DRIVE_12V_ERR", "给驱动的12V电压错误", 0}},
    {1709, {"VCU", "VCU_VDD1_VOL_ERR", "VDD1电压错误", 0}},
    {1710, {"VCU", "VCU_M1_MOS_SHORT_ERR", "<控制器内部故障>M1电机MOS管短路错误", 0}},
    {1711, {"VCU", "VCU_M2_MOS_SHORT_ERR", "<控制器内部故障>M2电机MOS管短路错误", 0}},
    {1712, {"VCU", "VCU_M3_MOS_SHORT_ERR", "<控制器内部故障>M3电机MOS管短路错误", 0}},
    {1713, {"VCU", "VCU_M4_MOS_SHORT_ERR", "<控制器内部故障>M4电机MOS管短路错误", 0}},
    {1714, {"VCU", "VCU_M5_MOS_SHORT_ERR", "<控制器内部故障>M5电机MOS管短路错误", 0}},
    {1715, {"VCU", "VCU_RELAY1_CONN_ERR", "继电器1连接错误", 0}},
    {1716, {"VCU", "VCU_VDD1_SHORT_ERR", "VDD1通道短路", 0}},
    {1717, {"VCU", "VCU_M1_SHORT_ERR", "M1电机短路", 0}},
    {1718, {"VCU", "VCU_M2_SHORT_ERR", "M2电机短路", 0}},
    {1719, {"VCU", "VCU_M3_SHORT_ERR", "M3电机短路", 0}},
    {1720, {"VCU", "VCU_M4_SHORT_ERR", "M4电机短路", 0}},
    {1721, {"VCU", "VCU_M5_SHORT_ERR", "M5电机短路", 0}},
    {1722, {"VCU", "VCU_CAN_MASTER_DISCONNECT_ERR", "CAN主机断线错误", 0}},
    {1723, {"VCU", "VCU_THROTTLE_CONN_ERR", "油门连接错误", 0}},
    {1724, {"VCU", "VCU_HIGH_PEDAL_STALL_ERR", "高踏板静止", 0}},
    {1725, {"VCU", "VCU_SPEED_LIMIT_THROTTLE_ERR", "限速油门连接错误", 0}},
    {1726, {"VCU", "VCU_TEMP_SENSOR_ABNORMAL_ERR", "温度传感器异常", 0}},
    {1727, {"VCU", "VCU_CURRENT_ADC_ERR", "<控制器内部故障>电流ADC采样错误", 0}},
    {1728, {"VCU", "VCU_M1_OPEN_ERR", "M1电机开路", 0}},
    {1729, {"VCU", "VCU_M2_OPEN_ERR", "M2电机开路错误", 0}},
    {1730, {"VCU", "VCU_M3_OPEN_ERR", "M3电机开路错误", 0}},
    {1731, {"VCU", "VCU_M4_OPEN_ERR", "M4电机开路", 0}},
    {1732, {"VCU", "VCU_M5_OPEN_ERR", "M5电机开路", 0}},
    {1733, {"VCU", "VCU_M1_OVERLOAD_ERR", "M1电机过载", 0}},
    {1734, {"VCU", "VCU_M2_OVERLOAD_ERR", "M2电机过载", 0}},
    {1735, {"VCU", "VCU_M3_OVERLOAD_ERR", "M3电机过载", 0}},
    {1736, {"VCU", "VCU_M4_OVERLOAD_ERR", "M4电机过载", 0}},
    {1737, {"VCU", "VCU_M5_OVERLOAD_ERR", "M5电机过载", 0}},
    {1738, {"VCU", "VCU_OUT1_OPEN_ERR", "OUT1开路故障", 0}},
    {1739, {"VCU", "VCU_OUT2_OPEN_ERR", "OUT2开路故障", 0}},
    {1740, {"VCU", "VCU_OUT3_OPEN_ERR", "OUT3开路故障", 0}},
    {1741, {"VCU", "VCU_OUT4_OPEN_ERR", "OUT4开路故障", 0}},
    {1742, {"VCU", "VCU_OUT5_OPEN_ERR", "OUT5开路故障", 0}},
    {1743, {"VCU", "VCU_OUT6_OPEN_ERR", "OUT6开路故障", 0}},
    {1744, {"VCU", "VCU_OUT7_OPEN_ERR", "OUT7开路故障", 0}},
    {1745, {"VCU", "VCU_OUT1_SHORT_ERR", "OUT1短路故障", 0}},
    {1746, {"VCU", "VCU_OUT2_SHORT_ERR", "OUT2短路故障", 0}},
    {1747, {"VCU", "VCU_OUT3_SHORT_ERR", "OUT3短路故障", 0}},
    {1748, {"VCU", "VCU_OUT4_SHORT_ERR", "OUT4短路故障", 0}},
    {1749, {"VCU", "VCU_OUT5_SHORT_ERR", "OUT5短路故障", 0}},
    {1750, {"VCU", "VCU_OUT6_SHORT_ERR", "OUT6短路故障", 0}},
    {1751, {"VCU", "VCU_OUT7_SHORT_ERR", "OUT7短路故障", 0}},
    {1752, {"VCU", "VCU_M1_MOS_OVERHEAT_ERR", "M1电机MOS管过热错误", 0}},
    {1753, {"VCU", "VCU_M1_HIGH_TEMP_ERR", "M1电机高温故障", 0}},
    {1754, {"VCU", "VCU_MODEL_PARAM_ERR", "产品型号参数错误", 0}},
    {1755, {"VCU", "VCU_NO_CLEAN_WATER_ERR", "无清水告警", 0}},
    {1756, {"VCU", "VCU_DIRTY_WATER_FULL_ERR", "污水满告警", 0}},
    {1757, {"VCU", "VCU_SEAT_SWITCH_OPEN_ERR", "座位开关开路错误", 0}},
    {1758, {"VCU", "VCU_TURN_SPEED_LIMIT_ERR", "转弯限速告警", 0}},
    {1759, {"VCU", "VCU_M2_UNDERVOLTAGE_ERR", "M2电机欠压告警", 0}},
    {1760, {"VCU", "VCU_M3_UNDERVOLTAGE_ERR", "M3电机欠压告警", 0}},
    {1761, {"VCU", "VCU_M1_UNDERVOLTAGE_ERR", "M1电机欠压告警", 0}},
    {1762, {"VCU", "VCU_BATTERY_VOL_VERY_HIGH_ERR", "电池电压非常高错误", 0}},
    {1763, {"VCU", "VCU_BATTERY_VOL_EXTREME_HIGH_ERR", "电池电压极限高错误", 0}},
    {1764, {"VCU", "VCU_BATTERY_VOL_EXTREME_LOW_ERR", "电池电压极限低错误", 0}},
    {1765, {"VCU", "VCU_M1_PHASE_A_OPEN_ERR", "M1电机A开路告警", 0}},
    {1766, {"VCU", "VCU_M1_PHASE_B_OPEN_ERR", "M1电机B开路告警", 0}},
    {1767, {"VCU", "VCU_VDD2_VOL_ERR", "VDD2电压错误", 0}},
    {1768, {"VCU", "VCU_RELAY2_CONN_ERR", "继电器2连接错误", 0}},
    {1769, {"VCU", "VCU_VDD2_SHORT_ERR", "VDD2通道短路", 0}},
    {1770, {"VCU", "VCU_M6_MOS_ERR", "M6电机电机MOS故障", 0}},
    {1771, {"VCU", "VCU_M7_MOS_ERR", "M7电机电机MOS故障", 0}},
    {1772, {"VCU", "VCU_M8_MOS_ERR", "M8电机电机MOS故障", 0}},
    {1773, {"VCU", "VCU_M6_SHORT_ERR", "M6电机电机短路", 0}},
    {1774, {"VCU", "VCU_M7_SHORT_ERR", "M7电机电机短路", 0}},
    {1775, {"VCU", "VCU_M8_SHORT_ERR", "M8电机电机短路", 0}},
    {1776, {"VCU", "VCU_M6_OVERLOAD_ERR", "M6电机电机过载", 0}},
    {1777, {"VCU", "VCU_M7_OVERLOAD_ERR", "M7电机电机过载", 0}},
    {1778, {"VCU", "VCU_M8_OVERLOAD_ERR", "M8电机电机过载", 0}},
    {1779, {"VCU", "VCU_M1_TEMP_SENSOR_ERR", "M1电机温度传感器异常", 0}},
    {1780, {"VCU", "VCU_M2_TEMP_SENSOR_ERR", "M2电机温度传感器异常", 0}},
    {1781, {"VCU", "VCU_M3_TEMP_SENSOR_ERR", "M3电机温度传感器异常", 0}},
    {1782, {"VCU", "VCU_ELECTRIC_BRAKE_OPEN_ERR", "电刹开路错误", 0}},
    {1783, {"VCU", "VCU_ELECTROMAGNETIC_BRAKE_SHORT_ERR", "电磁刹车短路故障", 0}},
    {1784, {"VCU", "VCU_PRECHARGE_2_ERR", "预充2错误", 0}},
    {1785, {"VCU", "VCU_SPEED_LIMIT_THROTTLE_FAULT_ERR", "限速油门故障", 0}},
    {1786, {"VCU", "VCU_HORN_OPEN_ERR", "喇叭开路告警", 0}},
    {1787, {"VCU", "VCU_HORN_SHORT_ERR", "喇叭短路告警", 0}},
    {1788, {"VCU", "VCU_CLEAN_WATER_LED_OPEN_ERR", "清水指示灯开路告警", 0}},
    {1789, {"VCU", "VCU_CLEAN_WATER_LED_SHORT_ERR", "清水指示灯短路故障", 0}},
    {1790, {"VCU", "VCU_DIRTY_WATER_LED_OPEN_ERR", "污水指示灯开路告警", 0}},
    {1791, {"VCU", "VCU_DIRTY_WATER_LED_SHORT_ERR", "污水指示灯短路故障", 0}},
    {1792, {"VCU", "VCU_WARNING_LIGHT_OPEN_ERR", "警灯开路告警", 0}},
    {1793, {"VCU", "VCU_WARNING_LIGHT_SHORT_ERR", "警灯短路故障", 0}},
    {1794, {"VCU", "VCU_SOLENOID_VALVE_OPEN_ERR", "电磁阀开路告警", 0}},
    {1795, {"VCU", "VCU_SOLENOID_VALVE_SHORT_ERR", "电磁阀短路故障", 0}},
    {1796, {"VCU", "VCU_FAULT_LIGHT_OPEN_ERR", "故障灯开路告警", 0}},
    {1797, {"VCU", "VCU_FAULT_LIGHT_SHORT_ERR", "故障灯短路故障", 0}},
    {1798, {"VCU", "VCU_WATER_PUMP_OPEN_ERR", "水泵开路告警", 0}},
    {1799, {"VCU", "VCU_WATER_PUMP_SHORT_ERR", "水泵短路故障", 0}},
    {1800, {"VCU", "VCU_HEADLIGHT_OPEN_ERR", "车大灯开路告警", 0}},
    {1801, {"VCU", "VCU_HEADLIGHT_SHORT_ERR", "车大灯短路故障", 0}},
    {1802, {"VCU", "VCU_LIGHT_STRIP_OPEN_ERR", "灯条开路告警", 0}},
    {1803, {"VCU", "VCU_LIGHT_STRIP_SHORT_ERR", "灯条短路故障", 0}},
    {1804, {"VCU", "VCU_CLEANER_PUMP_OPEN_ERR", "清洁剂泵开路告警", 0}},
    {1805, {"VCU", "VCU_CLEANER_PUMP_SHORT_ERR", "清洁剂泵短路故障", 0}},
    {1806, {"VCU", "VCU_M2_MOS_OVERHEAT_ERR", "M2电机MOS管过热错误", 0}},
    {1807, {"VCU", "VCU_M2_MOS_HIGH_TEMP_ERR", "M2电机MOS管高温告警", 0}},
    {1808, {"VCU", "VCU_M3_MOS_OVERHEAT_ERR", "M3电机MOS管过热错误", 0}},
    {1809, {"VCU", "VCU_M3_MOS_HIGH_TEMP_ERR", "M3电机MOS管高温告警", 0}},
    {1810, {"VCU", "VCU_RELAY1_DISCONNECT_ERR", "继电器1断开故障", 0}},
    {1811, {"VCU", "VCU_RELAY2_DISCONNECT_ERR", "继电器2断开故障", 0}},
    {1812, {"VCU", "VCU_CONTROLLER_LOW_TEMP_ERR", "控制器低温告警", 0}},
    {1813, {"VCU", "VCU_CONTROLLER_SEVERE_LOW_TEMP_ERR", "控制器严重低温告警", 0}},
    {1814, {"VCU", "VCU_CONTROLLER_CURRENT_SENSOR_ERR", "控制器电流传感器故障", 0}},

};