#include "mainwindow.h"
#include "Src/HomePage/homepagesetingwidget.h"
#include "Src/WebPage/CustomWebEnginePage.h"
#include "Src/WebPage/cwebengineview.h"
#include "global.h"
#include "ui_mainwindow.h"
#include <QAction>
#include <QFile>
#include <QFlags>
#include <QToolBar>
#include <qpushbutton.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow) {
  ui->setupUi(this);

  initFile();
  initWindow();
  initButton();
  initSignalSlot();
  processPDT = new QProcess(this);
  // apply the qss
  QFile file(":/res/Qss/qss.qss");
  if (file.open(QFile::ReadOnly)) {
    // file.open(QFile::ReadOnly);
    QString style = QLatin1String(file.readAll());

    qApp->setStyleSheet(style);
    // qDebug()<<style;
    file.close();
  } else {
    qDebug() << "Open  file fail " << Qt::endl;
  }

  QString appDir = QCoreApplication::applicationDirPath() + "/app";
  qDebug() << "Open  file fail " << appDir;

  initUAVIDMap();
}

MainWindow::~MainWindow() {
  delete m_SDFPDlg;
  delete m_GDDCdlg;
  delete m_HomePagedlg;
  // delete processPDT;
  //  delete mWeb;
  delete lLinkWeb;
  delete adHocNetworkWeb;
  delete satelliteCommWeb;
  if (m_ModelCameraDlg != nullptr)
    delete m_ModelCameraDlg;
  if (processPDT != nullptr) {
    if (processPDT->state() == QProcess::NotRunning)
      processPDT->kill();
    processPDT->deleteLater();
  }
  delete ui;
}
/**
 * @brief MainWindow::initFile 初始化配置文件 .ini
 */
void MainWindow::initFile() {
  QString urlFile = QCoreApplication::applicationDirPath() + "/config.ini";
  QFile file(urlFile);
  if (!file.open(QIODevice::ReadWrite)) {
    return;
  }
}
void MainWindow::initWindow() {
  setWindowIcon(QIcon(":/res/SDFP3.png"));

  // 设置主窗口背景颜色
  QPalette palette;
  palette.setColor(QPalette::Window, g_themeColor);
  this->setPalette(palette);
  this->setWindowTitle("载荷应用软件");
  this->resize(1450, 860);
  // this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);//隐藏边框

  m_SDFPDlg = new SDFPDlg(this);
  m_GDDCdlg = new GDDCdlg(this);
  m_HomePagedlg = new HomePageDlg(this);
  m_rescueLoadWidget = new RescueLoadWidget(this);

  // 使用类中的get方法获取配置文件中的IP
  m_allSetMap = m_HomePagedlg->settingWidget->getAllParam();
  m_GDDCdlg->setGlobalSetMap(m_allSetMap);
  qDebug() << "=============设备配置================";
  qDebug() << "光电吊舱------";
  qDebug() << "远端ip" << m_allSetMap["光电吊舱"].net.remoteIp;
  qDebug() << "L链----------";
  qDebug() << "ULR:" << m_allSetMap["L链"].url;
  qDebug() << "宽带自组网-----";
  qDebug() << "URL:" << m_allSetMap["宽带自组网"].url;
  qDebug() << "机载卫通------";
  qDebug() << "URL:" << m_allSetMap["机载卫通"].url;
  qDebug() << "三维建模------";
  qDebug() << "远端ip:" << m_allSetMap["三维建模"].net.remoteIp;
  qDebug() << "远端端口:" << m_allSetMap["三维建模"].net.remotePort;
  qDebug() << "本地ip:" << m_allSetMap["三维建模"].net.localIp;
  qDebug() << "本地端口:" << m_allSetMap["三维建模"].net.localPort;

  // mWeb = new CWebEngineView();
  // mWeb->setPage(new CustomWebEnginePage());
  // mWeb->load(QUrl("http://192.168.150.1"));

  lLinkWeb = new CWebEngineView();
  lLinkWeb->setPage(new CustomWebEnginePage());
  lLinkWeb->load(QUrl(m_allSetMap["L链"].url));

  adHocNetworkWeb = new CWebEngineView();
  adHocNetworkWeb->setPage(new CustomWebEnginePage());
  adHocNetworkWeb->load(QUrl(m_allSetMap["宽带自组网"].url));

  satelliteCommWeb = new CWebEngineView();
  satelliteCommWeb->setPage(new CustomWebEnginePage());
  satelliteCommWeb->load(QUrl(m_allSetMap["机载卫通"].url));

  m_ModelCameraDlg = new ModelCameraDlg(this);
  emit m_ModelCameraDlg->sendNetParam_signal(m_allSetMap["三维建模"].net);
  // 接收主页面设置窗口的url数据传递并设置
  connect(m_HomePagedlg->settingWidget, &HomePageSetingWidget::sendOneSet, this,
          [&](unsigned char urlIndex, settingStruct settings) {
            switch (urlIndex) {
            case HomePageSetingWidget::GDDC:
              // dosomething
              break;
            case HomePageSetingWidget::L_Link:
              lLinkWeb->load(QUrl(settings.url));
              break;
            case HomePageSetingWidget::Adhoc_Network:
              adHocNetworkWeb->load(QUrl(settings.url));
              break;
            case HomePageSetingWidget::Satelite_Comm:
              satelliteCommWeb->load(QUrl(settings.url));
              break;
            case HomePageSetingWidget::ModelCamera:
              m_ModelCameraDlg->sendNetParam_signal(settings.net);
              break;
            default:
              break;
            }
          });

  // 设置栈窗口,多页面共享同一窗口
  ui->stackedWidget->addWidget(m_SDFPDlg);
  ui->stackedWidget->addWidget(m_HomePagedlg);
  ui->stackedWidget->addWidget(m_GDDCdlg);
  // ui->stackedWidget->addWidget(mWeb);
  ui->stackedWidget->addWidget(lLinkWeb);
  ui->stackedWidget->addWidget(adHocNetworkWeb);
  ui->stackedWidget->addWidget(satelliteCommWeb);
  ui->stackedWidget->addWidget(m_rescueLoadWidget);
  ui->stackedWidget->addWidget(m_ModelCameraDlg);
  // 初始栈窗口显示主页
  ui->stackedWidget->setCurrentWidget(m_SDFPDlg);
}

void MainWindow::initButton() {
  int sizeX = 30;
  int sizeY = 30;
  int FixedWidth = 80;
  ui->toolButton->setIcon(QIcon(":/res/home.png"));
  ui->toolButton_2->setIcon(QIcon(":/res/GDDC.png"));
  ui->toolButton_3->setIcon(QIcon(":/res/LChain.png"));
  ui->toolButton_4->setIcon(QIcon(":/res/wifi4G.png"));
  ui->toolButton_5->setIcon(QIcon(":/res/PDT.png"));
  ui->toolButton_6->setIcon(QIcon(":/res/Ku.png"));
  ui->toolButton_7->setIcon(QIcon(":/res/research.png"));
  ui->toolButton_8->setIcon(QIcon(":/res/3D.png"));
  ui->toolButton_9->setIcon(QIcon(":/res/SDFP3.png"));
  ui->toolButton->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_2->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_3->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_4->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_5->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_6->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_7->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_8->setIconSize(QSize(sizeX, sizeY));
  ui->toolButton_9->setIconSize(QSize(sizeX * 1.2, sizeY * 1.2));
  ui->toolButton->setText("主页");
  ui->toolButton_2->setText("光电吊舱");
  ui->toolButton_3->setText("L链");
  ui->toolButton_4->setText("自组网");
  ui->toolButton_5->setText("PDT集群");
  ui->toolButton_6->setText("机载卫通");
  ui->toolButton_7->setText("搜救载荷");
  ui->toolButton_8->setText("三维建模");
  ui->toolButton_9->setText("时代飞鹏");
  ui->toolButton->setFixedWidth(FixedWidth);
  ui->toolButton_2->setFixedWidth(FixedWidth);
  ui->toolButton_3->setFixedWidth(FixedWidth);
  ui->toolButton_4->setFixedWidth(FixedWidth);
  ui->toolButton_5->setFixedWidth(FixedWidth);
  ui->toolButton_6->setFixedWidth(FixedWidth);
  ui->toolButton_7->setFixedWidth(FixedWidth);
  ui->toolButton_8->setFixedWidth(FixedWidth);
  ui->toolButton_9->setFixedWidth(FixedWidth);
  ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_2->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_3->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_4->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_5->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_6->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_7->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_8->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton_9->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
  ui->toolButton->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_2->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_3->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_4->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_5->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_6->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_7->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_8->setStyleSheet(g_ToolBtnStyle);
  ui->toolButton_9->setStyleSheet(g_ToolBtnStyle);
  // ui->pushButton->setStyleSheet(g_PushBtnStyle);
}

// 初始化信号与槽
void MainWindow::initSignalSlot() {
  connect(ui->toolButton, SIGNAL(clicked()), this, SLOT(toolButton_clicked()));
  connect(ui->toolButton_2, SIGNAL(clicked()), this,
          SLOT(toolButton_2_clicked()));
  connect(ui->toolButton_3, SIGNAL(clicked()), this,
          SLOT(toolButton_3_clicked()));
  connect(ui->toolButton_4, SIGNAL(clicked()), this,
          SLOT(toolButton_4_clicked()));
  connect(ui->toolButton_5, SIGNAL(clicked()), this,
          SLOT(toolButton_5_clicked()));
  connect(ui->toolButton_6, SIGNAL(clicked()), this,
          SLOT(toolButton_6_clicked()));
  connect(ui->toolButton_7, SIGNAL(clicked()), this,
          SLOT(toolButton_7_clicked()));
  connect(ui->toolButton_8, SIGNAL(clicked()), this,
          SLOT(toolButton_8_clicked()));
  connect(ui->toolButton_9, SIGNAL(clicked()), this,
          SLOT(toolButton_9_clicked()));
  connect(m_HomePagedlg->m_deviceStateDlg, &deviceStateDlg::switchToDevicePage,
          this, [&](int id) {
            switch (id) {
            case 0:
              toolButton_2_clicked(); // 光电吊舱
              break;
            case 1:
              toolButton_3_clicked(); // L链
              break;
            case 2:
              toolButton_4_clicked(); // 自组网
              break;
            case 3:
              toolButton_5_clicked(); // PDT集群
              break;
            case 4:
              toolButton_6_clicked(); // Ku卫通
              break;
            case 5:
              toolButton_7_clicked(); // 搜救载荷
              break;
            case 6:
              toolButton_8_clicked(); // 三维建模
              break;
            default:
              break;
            }
          });
}

// 主页
void MainWindow::toolButton_clicked() {
  changeBtnColor(1);
  ui->stackedWidget->setCurrentWidget(m_HomePagedlg);
}

// 光电吊舱
void MainWindow::toolButton_2_clicked() {
  changeBtnColor(2);
  ui->stackedWidget->setCurrentWidget(m_GDDCdlg);
}

// L链
void MainWindow::toolButton_3_clicked() {
  changeBtnColor(3);
  // mWeb->load(QUrl("http://192.168.1.10"));
  ui->stackedWidget->setCurrentWidget(lLinkWeb);
}

// 自组网
void MainWindow::toolButton_4_clicked() {
  changeBtnColor(4);
  // mWeb->load(QUrl("http://192.168.1.10"));
  // mWeb->show();
  ui->stackedWidget->setCurrentWidget(adHocNetworkWeb);
}

// PDT集群
void MainWindow::toolButton_5_clicked() {
  changeBtnColor(5);

  QString pdtDirPath = QCoreApplication::applicationDirPath() + "/NMC7.0";
  QString exePath = pdtDirPath + "/NMC.exe";
  // qDebug() << "*********PDT Path:" << pdtDirPath;
  processPDT->setWorkingDirectory(pdtDirPath); // 设置工作目录
  processPDT->start(exePath);                  //
}

// Ku卫通
void MainWindow::toolButton_6_clicked() {
  changeBtnColor(6);
  ui->stackedWidget->setCurrentWidget(satelliteCommWeb);
}

// 搜救载荷
void MainWindow::toolButton_7_clicked() {
  changeBtnColor(7);
  ui->stackedWidget->setCurrentWidget(m_rescueLoadWidget);
}

// 三维建模
void MainWindow::toolButton_8_clicked() {
  changeBtnColor(8);
  ui->stackedWidget->setCurrentWidget(m_ModelCameraDlg);
}
// 时代飞鹏
void MainWindow::toolButton_9_clicked() {
  changeBtnColor(9);
  ui->stackedWidget->setCurrentWidget(m_SDFPDlg);
}

// 更新主界面按钮颜色
void MainWindow::changeBtnColor(int num) {
  initButton();
  switch (num) {
  case 1:
    ui->toolButton->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 2:
    ui->toolButton_2->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 3:
    ui->toolButton_3->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 4:
    ui->toolButton_4->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 5:
    ui->toolButton_5->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 6:
    ui->toolButton_6->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 7:
    ui->toolButton_7->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 8:
    ui->toolButton_8->setStyleSheet(g_ToolBtnSelStyle);
    break;
  case 9:
    ui->toolButton_9->setStyleSheet(g_ToolBtnSelStyle);
    break;
  }
}

/**
 * @brief 初始化UAVID与推流APPName的映射关系
 */
void MainWindow::initUAVIDMap() {
  g_mapAppName[5] = "nmyj";
  g_mapAppName[7] = "nmyj";
  for (int i = 8; i < 13; ++i) {
    g_mapAppName[i] = "jsyj";
  }
}