#pragma once
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDesktopServices>
#include <QUrl>

class QEvent;
class QHideEvent;
class QShowEvent;
class QTimer;

class WelcomeDock : public QWidget
{
    Q_OBJECT
public:

    explicit WelcomeDock(QWidget* parent = nullptr);

    QLabel* m_leftImage;       // 左侧图片：展示欢迎页主 Logo。
    QPushButton* m_languageSettingsBtn; // 语言设置按钮：打开设置对话框中的语言页签。
    QLabel* m_copyright;       // 版权信息：展示版权、版本号和编译时间。
    QLabel* m_contributors;    // 贡献者信息：展示当前参与名单。
    QLabel* m_referenceTitle;  // 参考项目标题：说明下方按钮均为外部参考仓库入口。
    QLabel* m_donors;          // 捐赠者信息：展示当前公开感谢的捐赠者名单。
    QPushButton* m_githubBtn;  // Github按钮：打开项目仓库入口。
    QPushButton* m_qqBtn;      // QQ群按钮：保留项目交流群入口。
    QPushButton* m_pplControlBtn;      // PPLcontrol按钮：打开 PPLcontrol 参考仓库。
    QPushButton* m_systemInformerBtn;  // System Informer按钮：打开 System Informer 参考仓库。
    QPushButton* m_skt64Btn;           // SKT64按钮：打开 SKT64 参考仓库。

    // 布局管理器：欢迎页只保留主内容区，并在主入口下方展示贡献者和参考项目。
    QHBoxLayout* m_mainLayout;      // 主布局：承载欢迎页主体内容。
    QVBoxLayout* m_leftLayout;      // 左侧垂直布局：按 Logo、发布信息、按钮区和扩展信息排列。
    QHBoxLayout* m_btnLayout;       // 按钮水平布局：放置 Github 与 QQ 群按钮。
    QHBoxLayout* m_referenceLayout; // 参考项目布局：横向放置外部参考仓库按钮。

signals:
    // languageSettingsRequested 作用：通知主窗口打开设置对话框并定位到语言页签。
    void languageSettingsRequested();

protected:
    void changeEvent(QEvent* event) override;
    void showEvent(QShowEvent* event) override;
    void hideEvent(QHideEvent* event) override;

private:
    void retranslateUi();
    void initializeLanguageButtonStyle();
    void updateLanguageButtonRgbBorder();

    int m_languageButtonHue = 0; // RGB 动效当前色相，范围为 0~359。
    QTimer* m_languageButtonColorTimer = nullptr; // 语言按钮动画计时器：仅 WelcomeDock 可见时运行。
};
