#include "ConfigExpertWidget.h"

#include "common/QFDIcon.h"

#include <Common/Icon.h>
#include <Widgets/Button.h>
#include <Widgets/SpinBox.h>

#include <QBoxLayout>
#include <QSplitter>
#include <QLabel>
#include <QListWidget>

ConfigExpertWidget::ConfigExpertWidget(QWidget *parent) : QWidget(parent)
{
    initialize();
    initLayout();
    connectSignalsAndSlots();

    refreshAddedList();
    refreshExpList();
}

void ConfigExpertWidget::initialize()
{
    QPalette pal(palette());
    pal.setColor(QPalette::Background, QColor("#ffffff"));
    setAutoFillBackground(true);
    setPalette(pal);

    m_vBoxLayout = new QVBoxLayout(this);
    m_titleLabel = new QLabel("专家配置", this);
    m_titleLabel->setObjectName("titleLabel");
    m_titleLabel->setFixedHeight(50);
    m_titleLabel->setContentsMargins(10, 0, 0, 0);
    m_splitter = new QSplitter(Qt::Vertical, this);
    m_splitter->setChildrenCollapsible(false);

    m_addedWidget = new QWidget(this);
    m_addedWidget->setObjectName("addedWidget");
    m_addedWidgetLayout = new QVBoxLayout(m_addedWidget);
    m_addedWidgetLayout->setSpacing(0);
    m_addedWidgetLayout->setMargin(0);
    m_addedListHeader = new QWidget(this);
    m_addedListHeader->setObjectName("addedListHeader");
    m_addedListHeader->setFixedHeight(30);
    m_addedListHeaderLayout = new QHBoxLayout(m_addedListHeader);
    m_addedListTitleLabel   = new QLabel("已添加", this);
    m_addedListTitleLabel->setObjectName("addedListTitleLabel");
    m_addedListTitleLabel->setMargin(5);
    m_addedListTipsLabel = new QLabel("注:已添加专家的权重之和须等于1", this);
    m_addedListTipsLabel->setObjectName("addedListTipsLabel");
    m_addedListTipsLabel->setFixedHeight(20);

    m_saveButton = new QPushButton(NEWFLICON(FluentIcon, SAVE)->icon(), "", this);
    m_saveButton->setObjectName("saveButton");
    m_saveButton->setFixedSize(QSize(28, 28));
    m_saveButton->setToolTip("保存");
    m_addedListWidget = new QListWidget(this);
    m_addedListWidget->setObjectName("addedListWidget");

    m_expWidget = new QWidget(this);
    m_expWidget->setObjectName("expWidget");
    m_expWidgetLayout = new QVBoxLayout(m_expWidget);
    m_expWidgetLayout->setSpacing(0);
    m_expWidgetLayout->setMargin(0);
    m_expListHeader = new QWidget(this);
    m_expListHeader->setObjectName("expListHeader");
    m_expListHeader->setFixedHeight(30);
    m_expListHeaderLayout = new QHBoxLayout(m_expListHeader);
    m_expListTitleLabel   = new QLabel("专家列表", this);
    m_expListTitleLabel->setObjectName("expListTitleLabel");
    m_expListTitleLabel->setMargin(5);
    m_refreshButton = new QPushButton(NEWFLICON(FluentIcon, SYNC)->icon(), "", this);
    m_refreshButton->setObjectName("refreshButton");
    m_refreshButton->setFixedSize(QSize(28, 28));
    m_refreshButton->setToolTip("刷新");
    m_expListWidget = new QListWidget(this);
    m_expListWidget->setObjectName("expListWidget");
}

void ConfigExpertWidget::initLayout()
{
    m_vBoxLayout->setMargin(0);
    m_vBoxLayout->setSpacing(0);
    m_vBoxLayout->addWidget(m_titleLabel);
    m_vBoxLayout->addWidget(m_splitter);

    m_splitter->addWidget(m_addedWidget);
    m_splitter->addWidget(m_expWidget);

    m_addedWidgetLayout->addWidget(m_addedListHeader);
    m_addedWidgetLayout->addWidget(m_addedListWidget);
    m_addedWidgetLayout->addWidget(m_addedListTipsLabel, Qt::AlignBottom);

    m_expWidgetLayout->addWidget(m_expListHeader);
    m_expWidgetLayout->addWidget(m_expListWidget);

    m_addedListHeaderLayout->setMargin(0);
    m_addedListHeaderLayout->addWidget(m_addedListTitleLabel, Qt::AlignLeft);
    m_addedListHeaderLayout->addWidget(m_saveButton, Qt::AlignRight);

    m_expListHeaderLayout->setMargin(0);
    m_expListHeaderLayout->addWidget(m_expListTitleLabel, Qt::AlignLeft);
    m_expListHeaderLayout->addWidget(m_refreshButton, Qt::AlignRight);

    m_splitter->setStretchFactor(0, 2);
    m_splitter->setStretchFactor(1, 3);

    setStyleSheet("#titleLabel {color:#333333; font-size:16px}"
                  "#addedListTipsLabel {color:#999999;}"
                  "#addedListHeader {background-color:#f8f8f8;border: 1px solid rgba(0, 0, 0, 0.073);}"
                  "#expListHeader {background-color:#f8f8f8;border: 1px solid rgba(0, 0, 0, 0.073);}"
                  "QPushButton {border: 0;background-color: qlineargradient(x1: 0, y1: 0, x2: "
                  "0, y2: 1,stop: 0 #f8f8f8, stop: 1 #f8f8f8);}"
                  "QPushButton::hover {border: 1px solid rgba(0, 0, 0, 0.073);}"
                  "QPushButton::pressed {background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #dadbde, "
                  "stop: 1 #f6f7fa);}"
                  "QListWidget {border: 1px solid rgba(0, 0, 0, 0.073);}"
                  "QListView::item {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ffffff, stop: 0.9 "
                  "#ffffff,stop: 1 #eeeeee);height:44;}"
                  "QDoubleSpinBox {border: 1px solid rgba(0, 0, 0, 0.173);}"
                  "#addedListTitleLabel {font:bold; font-size:12px;}"
                  "#expListTitleLabel {font:bold; font-size:12px;}");
}

void ConfigExpertWidget::connectSignalsAndSlots() { }

void ConfigExpertWidget::refreshAddedList()
{
    m_addedListWidget->clear();

    for (int i = 1; i <= 3; i++) {
        QListWidgetItem *item = new QListWidgetItem;
        QWidget *w            = new QWidget();
        QHBoxLayout *hBox     = new QHBoxLayout(w);
        QLabel *idx           = new QLabel(QString::number(i));
        idx->setFixedWidth(25);
        QLabel *name         = new QLabel(QString("专家%1").arg(i * 2));
        QDoubleSpinBox *spin = new QDoubleSpinBox(w);
        spin->setRange(0, 1);
        spin->setSingleStep(0.01);
        spin->setFixedSize(QSize(60, 25));
        QPushButton *button = new QPushButton(NEWFLICON(QFDIcon, Minus)->icon(), "", w);
        button->setFixedSize(QSize(25, 25));
        button->setIconSize(QSize(10, 10));
        button->setToolTip("移除");

        hBox->setSpacing(0);
        hBox->setMargin(10);
        hBox->addWidget(idx);
        hBox->addWidget(name);
        hBox->addSpacing(20);
        hBox->addWidget(spin, Qt::AlignCenter);
        hBox->addStretch();
        hBox->addWidget(button, Qt::AlignRight);

        m_addedListWidget->addItem(item);
        m_addedListWidget->setItemWidget(item, w);

        idx->setStyleSheet("font-size:14px; color:#aaaaaa");
    }
}

void ConfigExpertWidget::refreshExpList()
{
    m_expListWidget->clear();

    for (int i = 1; i <= 50; i++) {
        QListWidgetItem *item = new QListWidgetItem;
        QWidget *w            = new QWidget();
        QHBoxLayout *hBox     = new QHBoxLayout(w);
        QLabel *idx           = new QLabel(QString::number(i));
        idx->setFixedWidth(25);
        QLabel *name        = new QLabel(QString("专家%1").arg(i));
        QPushButton *button = new QPushButton(NEWFLICON(FluentIcon, ADD)->icon(), "", w);
        button->setFixedSize(QSize(25, 25));
        button->setIconSize(QSize(10, 10));
        button->setToolTip("添加");

        if (i % 2 == 0 && i <= 6) {
            button->setHidden(true);
        }

        hBox->setSpacing(0);
        hBox->setMargin(10);
        hBox->addWidget(idx);
        hBox->addWidget(name);
        hBox->addStretch();
        hBox->addWidget(button, Qt::AlignRight);

        m_expListWidget->addItem(item);
        m_expListWidget->setItemWidget(item, w);

        idx->setStyleSheet("font-size:14px; color:#aaaaaa");
    }
}