#ifndef CIRCLEPROGRESSLABEL_H
#define CIRCLEPROGRESSLABEL_H

#include <QLabel>
#include <QObject>

/**
 * @brief CircleProgressLabel 是一个继承自 QLabel 的自定义控件，用于显示圆形进度条。
 *
 * 该类主要用于在界面上显示一个圆形进度条，并在中心显示当前进度值和提示信息。
 * 可以通过设置不同的颜色主题来改变进度条和中心区域的显示效果。
 *
 * 核心功能包括：
 * - 设置当前进度值（0.0 到 1.0）
 * - 设置中心显示的值和提示信息
 * - 设置主题颜色（主色和副色）
 * - 设置准备状态
 *
 * 使用示例：
 *
 * 构造函数参数：
 * - QWidget *parent：指定父窗口，默认为 nullptr。
 *
 * 特殊使用限制或潜在的副作用：
 * - 进度值必须在 0.0 到 1.0 之间，否则可能导致显示异常。
 * - 主题颜色的设置会影响进度条和中心区域的显示效果，请确保颜色搭配合理。
 */
class CircleProgressLabel : public QLabel
{
    Q_OBJECT
public:
    explicit CircleProgressLabel(QWidget *parent = nullptr);

    void setProgress(qreal value); // 0.0 ~ 1.0

    void setCenterValue(const QString &newCenterValue);

    void setCenterTips(const QString &newCenterTips);

    void setThemeColor(const QColor& main, const QColor& sub);

    void setPrepareState(int newPrepareState = 0);

private:
    void updateTheme(); // 根据主色自动调整渐变

protected:
    void paintEvent(QPaintEvent *event) override;

private:
    qreal m_progress = 0.75; // 进度，0~1
    QString m_centerValue = "%75";
    QString m_centerTips = "Charging";

    int m_prepareState;

    QColor m_mainColor = QColor(0xFF, 0x7A, 0x2F); // 主色（橙/蓝）
    QColor m_subColor = QColor(0xFF, 0xB3, 0x6B);  // 副色（浅橙/浅蓝）
    QColor m_centerGradStart = QColor(0x6B, 0x3B, 0x1A);
    QColor m_centerGradEnd = QColor(0x8B, 0x52, 0x20);
};

#endif // CIRCLEPROGRESSLABEL_H
