#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "view/beltspeedlinewidget.h"
#include "view/coaldistributbarchartwidget.h"
#include "view/coalstaticwidget.h"

#include <QDateTime>
#include <QTimer>

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint);
    this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint);

    ui->widget_head->installEventFilter(this);

    m_systemSetting = new QSettings("system.ini", QSettings::IniFormat);

    createSystemINI();

    this->setWindowTitle(m_systemSetting->value("system/name").toString());

    calendarLoopPlay();

    setSystemTitle();

    setBeltWarnInfoTextEditStyle();

    addcoalDistributChart();

    addbeltSpeedChat();

    addCoalStatisticsChart();

    addCoalBeltVideo();
}

MainWindow::~MainWindow() { delete ui; }

bool MainWindow::eventFilter(QObject* watched, QEvent* event)
{
    // 处理鼠标按下、释放和移动事件
    if (watched == ui->widget_head) {
        QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
        if (mouseEvent->type() == QEvent::MouseButtonPress) {
            if (mouseEvent->button() == Qt::LeftButton) {
                m_mousePressed = true; // 启动拖拽
                m_mousePoint = mouseEvent->globalPos() - this->pos();

                this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint | Qt::Window | Qt::WindowStaysOnTopHint);
                this->show(); // 确保窗口显示

                return true;
            }
        } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
            m_mousePressed = false;
            return true;
        } else if (mouseEvent->type() == QEvent::MouseMove) {
            if (m_mousePressed && (mouseEvent->buttons() & Qt::LeftButton)) {
                this->move(mouseEvent->globalPos() - m_mousePoint);

                // 每次移动时设置为最上方
                this->setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint | Qt::Window | Qt::WindowStaysOnTopHint);
                this->show();
                return true;
            }
        }
    }
}

void MainWindow::addBeltWarnInfoToTextEdit(const QString& consoleInfo)
{
    qDebug() << consoleInfo;
    m_textEditConsoleInfo.append(consoleInfo);
    QDateTime startDateTime = QDateTime::currentDateTime();
    QString formattedTime = startDateTime.toString("yyyy-MM-dd hh:mm:ss");

    if (m_textEditConsoleInfo.isEmpty())
        return;
    QString lastConsoleInfo = m_textEditConsoleInfo.last();

    //    qint64 timeDifferenceInMilliseconds =
    //    m_previousConsleInfoDateTime.secsTo(startDateTime);

    //    if ((lastConsoleInfo == consoleInfo) && timeDifferenceInMilliseconds <
    //    2)
    //        return;

    QString consoleInfoResult = QStringLiteral("[%1]%2").arg(formattedTime).arg(consoleInfo);
    ui->textEdit_beltWarnInfo->append(consoleInfoResult);

    m_previousConsleInfoDateTime = QDateTime::currentDateTime();
}

void MainWindow::on_pushButton_close_clicked() { this->close(); }

void MainWindow::on_pushButton_max_clicked()
{
    if (isFullScreen()) {
        this->showMaximized();
    } else {
        this->showFullScreen();
    }
}

void MainWindow::on_pushButton_min_clicked() { this->showMinimized(); }

void MainWindow::calendarLoopPlay()
{
    ui->label_calendar->clear();
    QTimer* timer_calendar = new QTimer(this);
    connect(timer_calendar, &QTimer::timeout, this, [this]() {
        QDateTime time = QDateTime::currentDateTime();
        QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
        ui->label_calendar->setText(str);
    });
    timer_calendar->start(1000); //每一秒溢出一次进入槽函数
}

void MainWindow::createSystemINI()
{
    // 写入数据到INI文件
    // 判断并设置 "system/name"
    if (!m_systemSetting->contains("system/name")) {
        m_systemSetting->setValue("system/name", "煤流监测平台");
    }

    // 判断并设置 "coalStaticInterface/url"
    if (!m_systemSetting->contains("coalStaticInterface/url")) {
        m_systemSetting->setValue("coalStaticInterface/url", 30);
    }

    // 判断并设置 "addr/ip"
    if (!m_systemSetting->contains("addr/ip")) {
        m_systemSetting->setValue("addr/ip", "127.0.0.1");
    }

    // 判断并设置 "addr/port"
    if (!m_systemSetting->contains("addr/port")) {
        m_systemSetting->setValue("addr/port", 3000);
    }

    // 判断并设置 "camera/rtsp"
    if (!m_systemSetting->contains("camera/rtsp")) {
        m_systemSetting->setValue("camera/rtsp", 3000);
    }

    // 判断并设置"system/different"
    if (!m_systemSetting->contains("system/different")) {
        m_systemSetting->setValue("system/different", 1);
    }
}

void MainWindow::setSystemTitle()
{
    QString titleName = m_systemSetting->value("system/name").toString();
    if (!titleName.isEmpty()) {
        ui->label_title->clear();
        ui->label_title->setText(titleName);
    }
}

void MainWindow::setBeltWarnInfoTextEditStyle()
{
    ui->textEdit_beltWarnInfo->document()->setMaximumBlockCount(100);
    ui->textEdit_beltWarnInfo->setReadOnly(true);
    ui->textEdit_beltWarnInfo->setTextInteractionFlags(Qt::NoTextInteraction);
}

void MainWindow::addcoalDistributChart()
{
    //    addBeltWarnInfoToTextEdit("添加煤流分布窗口成功！");
    ui->textEdit_beltWarnInfo->append("添加煤流分布窗口成功！");

    CoalDistributBarChartWidget* coalDistributBarChartWidget = new CoalDistributBarChartWidget(this);

    // 检查布局是否已设置
    if (!ui->widget_coalDistributChart->layout()) {
        ui->widget_coalDistributChart->setLayout(new QVBoxLayout);
    }
    coalDistributBarChartWidget->setContentsMargins(0, 0, 0, 0);
    ui->widget_coalDistributChart->layout()->addWidget(
        coalDistributBarChartWidget);
}

void MainWindow::addbeltSpeedChat()
{
    //  ui->textEdit_beltWarnInfo->append("添加皮带机速度曲线窗口成功！");
    //  BeltSpeedLineWidget *beltSpeedLineWidget = new BeltSpeedLineWidget(this);
    //  // 检查布局是否已设置
    //  if (!ui->widget_beltSpeedChart->layout()) {
    //    ui->widget_beltSpeedChart->setLayout(new QVBoxLayout);
    //  }
    //  beltSpeedLineWidget->setContentsMargins(0, 0, 0, 0);
    //  ui->widget_beltSpeedChart->layout()->addWidget(beltSpeedLineWidget);
}

void MainWindow::addCoalStatisticsChart()
{
    //    ui->textEdit_beltWarnInfo->append("添加煤量统计窗口成功！");
    //    CoalStatisticsChartWidget* coalStatisticsChartWidget = new CoalStatisticsChartWidget(this);
    //    // 检查布局是否已设置
    //    if (!ui->widget_coalStatisticsChart->layout()) {
    //        ui->widget_coalStatisticsChart->setLayout(new QVBoxLayout);
    //    }
    //    coalStatisticsChartWidget->setContentsMargins(0, 0, 0, 0);
    //    ui->widget_coalStatisticsChart->layout()->addWidget(coalStatisticsChartWidget);

    //    connect(coalStatisticsChartWidget, &CoalStatisticsChartWidget::querySuccessInfo, this, &MainWindow::addBeltWarnInfoToTextEdit);

    CoalStaticWidget* coalStaticWidget = new CoalStaticWidget(this);

    // 检查布局是否已设置
    if (!ui->widget_coalStatis->layout()) {
        ui->widget_coalStatis->setLayout(new QVBoxLayout);
    }
    coalStaticWidget->setContentsMargins(0, 0, 0, 0);
    ui->widget_coalStatis->layout()->addWidget(coalStaticWidget);

    connect(coalStaticWidget, &CoalStaticWidget::querySuccessInfo, this, &MainWindow::addBeltWarnInfoToTextEdit);
}

void MainWindow::addCoalBeltVideo()
{
    //  QString url = "https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218114723HDu3hhxqIT.mp4";
    //  QString url = "rtsp://admin:1234qwer@192.168.80.82:554/Streaming/Channels/101";
    QString url = m_systemSetting->value("camera/rtsp").toString();
    ui->widget_beltVideo->setUrl(url);
    ui->widget_beltVideo->open();
}
