#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QDateTime>
#include <QMainWindow>
#include <QSettings>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow {
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

protected:
  bool eventFilter(QObject *watched, QEvent *event) override;

public slots:
  /**
   * @brief 皮带报警信息
   * @param consoleInfo
   */
  void addBeltWarnInfoToTextEdit(const QString &consoleInfo);

private slots:
  void on_pushButton_close_clicked();

  void on_pushButton_max_clicked();

  void on_pushButton_min_clicked();

private:
  /**
   * @brief calendarLoopPlay  时间轮播
   */
  void calendarLoopPlay();

  /**
   * @brief createSystemINI 创建系统配置文件
   */
  void createSystemINI();

  /**
   * @brief setSystemTitle 设置系统标题
   */
  void setSystemTitle();

  /**
   * @brief setBeltWarnInfoTextEditStyle 调整皮带报警信息编辑框样式
   */
  void setBeltWarnInfoTextEditStyle();

  /**
   * @brief addcoalDistributChart   添加煤流分布柱状图
   */
  void addcoalDistributChart();

  /**
   * @brief addbeltSpeedChat  添加皮带机速度曲线图
   */
  void addbeltSpeedChat();

  /**
   * @brief addCoalStatisticsChart    添加煤量统计图表
   */
  void addCoalStatisticsChart();

  /**
   * @brief addCoalBeltVideo    添加皮带机视频窗口
   */
  void addCoalBeltVideo();

private:
  Ui::MainWindow *ui;

  /**
   * @brief m_textEditConsoleInfo 控制台命令列表信息
   */
  QList<QString> m_textEditConsoleInfo;

  /**
   * @brief m_previousConsleInfoDateTime 上一条控制台命令发送时间
   */
  QDateTime m_previousConsleInfoDateTime;

  /**
   * @brief m_systemSetting 系统配置信息
   */
  QSettings *m_systemSetting;

  // 窗口拖拽
  QPoint m_mousePoint;
  bool m_mousePressed{false};
};

#endif // MAINWINDOW_H
