#pragma once

#include <string>
#include <unordered_map>
#include <iostream>
#include <set>
#include "get_config.h"

struct FaultInfo
{
    std::string subsystem;   // 故障设备
    std::string error_name;  // 故障名称
    std::string description; // 中文描述
    int level;               // 故障等级，0-3
};

class ErrorCodeSet
{
public:
    // 添加错误码（自动去重）
    void addErrorCode(int code)
    {
        errors.insert(code);
    }

    // 删除错误码
    void removeErrorCode(int code)
    {
        errors.erase(code);
    }

    // 打印所有当前错误码
    void printErrors() const
    {
        std::cout << "Current error codes: ";
        for (int code : errors)
        {
            std::cout << code << " ";
        }
        std::cout << std::endl;
    }

    // 获取所有当前错误码
    const std::set<int> &getAllErrorCodes() const
    {
        return errors;
    }

    // 判断某个错误码是否存在
    bool hasError(int code) const
    {
        return errors.find(code) != errors.end();
    }

private:
    std::set<int> errors;
};

// 故障字典声明（在 .cpp 实现里定义）
extern std::unordered_map<int, FaultInfo> faultMap;
extern const uint8_t epsErrorCode[18];
extern ErrorCodeSet vehicle_error_code;

std::string generateFaultJson(int code, const std::string &vin, int64_t timestamp);
bool updateFaultLevel(int code, int newLevel);