#ifndef CPUCONTROLLER_H
#define CPUCONTROLLER_H

#include <map>
#include <string>
#include <vector>

/**
 * @brief CPU 控制器
 */
class CPUController
{
public:
    /**
     * @brief 获取 CPU 型号
     */
    static std::string getCpuModelName();

    /**
     * @brief 启用 CPU 超线程
     */
    static void enableCpuSMT();

    /**
     * @brief 禁用 CPU 超线程
     */
    static void disableCpuSMT();

    /**
     * @brief 获取 CPU 超线程状态
     */
    static bool getCpuSMTStatus();

    /**
     * @brief 获取 CPU 核心在线数量
     */
    static int getCpuCoreOnlineCount();

    /**
     * @brief 获取 CPU 核心总数
     */
    static int getCpuCoreCount();

    /**
     * @brief 启用 CPU 睿频
     */
    static void enableCpuBoost();

    /**
     * @brief 禁用 CPU 睿频
     */
    static void disableCpuBoost();

    /**
     * @brief 获取 CPU 睿频状态
     */
    static bool getCpuBoostStatus();

    /**
     * @brief 设置所有 CPU 最大频率
     * @return 是否成功
     */
    static bool setAllCpuMaxFrequency(int frequency);

    /**
     * @brief 设置所有 CPU 最小频率
     * @return 是否成功
     */
    static bool setAllCpuMinFrequency(int frequency);

    /**
     * @brief 获取所有 CPU 可用频率
     */
    static std::vector<int> getAvailableFrequencies(int cpu);

    /**
     * @brief 设置所有 CPU 调频
     */
    static void setAllCpuGovernor(std::string governor);

    /**
     * @brief 获取所有 CPU 可用调度
     */
    static std::vector<std::string> getAvailableGovernors(int cpu);

    /**
     * @brief 获取 CPU 逻辑到物理核心的映射
     */
    static std::map<int, int> getLogicalToClusterMap();

};

#endif // CPUCONTROLLER_H