#include <qlayoutitem.h>

#include "aboutpage.h"

AboutPage::AboutPage(QWidget* parent) : 
    PageWidget(parent)
{
    _contentWidget->setMouseTracking(true);

    // Construct title layout
    _titleLayout = new QVBoxLayout(_contentWidget);
    _titleLayout->setContentsMargins(28, 46, 28, 28);
    _titleLayout->setSpacing(18);
    _titleLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    _contentWidget->setLayout(_titleLayout);

    // Construct title
    _titleLabel = new QLabel("ABOUT", _contentWidget);
    _titleLabel->setFont(_titleFont);
    _titleLayout->addWidget(_titleLabel);
    _titleLabel->show();

    // Construct main layout
    _mainWidget = new QWidget(_contentWidget);
    _mainWidget->setObjectName("mainWidget");
    _mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
    _mainWidget->setStyleSheet("QWidget#mainWidget { background-color: #efefef; border-radius: 8px; }");
    _mainLayout = new QVBoxLayout(_mainWidget);
    _mainLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    _mainLayout->setContentsMargins(0, 8, 0, 8);
    _mainLayout->setSpacing(8);
    _mainWidget->setLayout(_mainLayout);
    _titleLayout->addWidget(_mainWidget);
    _mainWidget->show();
    
    // Construct contents
    _authorLabel = new LineEditWidget(_mainWidget);
    _authorLabel->mainLayout()->insertWidget(0, new QLabel("Author"));
    _authorLabel->mainLayout()->insertSpacing(1, 8);
    _authorLabel->setBackgroundColor(QColor(0, 0, 0, 0));
    _authorLabel->setHoverColor(QColor(0, 0, 0, 10));
    _authorLabel->setPressedColor(QColor(0, 0, 0, 20));
    _authorLabel->setText("Linloir");
    _authorLabel->setEnabled(false);
    _mainLayout->addWidget(_authorLabel);
    _authorLabel->show();

    _versionLabel = new LineEditWidget(_mainWidget);
    _versionLabel->mainLayout()->insertWidget(0, new QLabel("Version"));
    _versionLabel->mainLayout()->insertSpacing(1, 8);
    _versionLabel->setBackgroundColor(QColor(0, 0, 0, 0));
    _versionLabel->setHoverColor(QColor(0, 0, 0, 10));
    _versionLabel->setPressedColor(QColor(0, 0, 0, 20));
    _versionLabel->setText("1.0.0");
    _versionLabel->setEnabled(false);
    _mainLayout->addWidget(_versionLabel);
    _versionLabel->show();

    _dateLabel = new LineEditWidget(_mainWidget);
    _dateLabel->mainLayout()->insertWidget(0, new QLabel("Last Update"));
    _dateLabel->mainLayout()->insertSpacing(1, 8);
    _dateLabel->setBackgroundColor(QColor(0, 0, 0, 0));
    _dateLabel->setHoverColor(QColor(0, 0, 0, 10));
    _dateLabel->setPressedColor(QColor(0, 0, 0, 20));
    _dateLabel->setText("2020/12/31");
    _dateLabel->setEnabled(false);
    _mainLayout->addWidget(_dateLabel);
    _dateLabel->show();
}

AboutPage::~AboutPage() {}

PushButton* AboutPage::getPageIconButton(QWidget* context) {
    // Check for existed button
    if (_iconButton != nullptr) {
        return _iconButton;
    }

    // Generate new icon button
    _iconButton = new PushButton(nullptr, context);
    _iconButton->setMargin(20, 18, 16, 18);
    _iconButtonLabel = new QLabel(_iconButton);
    _iconButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
    QFont iconButtonFont("Font Awesome 6 Free Regular", 12);
    iconButtonFont.setStyleStrategy(QFont::PreferAntialias);
    _iconButtonLabel->setFont(iconButtonFont);
    _iconButtonLabel->setText("\uf059");
    _iconButtonLabel->setAlignment(Qt::AlignLeft);
    _iconButton->setChildWidget(_iconButtonLabel);

    // Return newly generated icon
    return _iconButton;
}

PushButton* AboutPage::getPageTextButton(QWidget* context) {
    // Check for existed button
    if (_textButton != nullptr) {
        return _textButton;
    }

    // Generate new text button
    _textButton = new PushButton(nullptr, context);
    _textButton->setMargin(20, 18, 16, 18);
    _textButtonWidget = new QWidget(_textButton);
    _textButtonLayout = new QHBoxLayout(_textButtonWidget);
    _textButtonLayout->setContentsMargins(0, 0, 0, 0);
    _textButtonLayout->setSpacing(12);
    _textButtonWidget->setLayout(_textButtonLayout);

    // Generate text button contents
    _textButtonIcon = new QLabel(_textButtonWidget);
    QFont textButtonFont("Font Awesome 6 Free Regular", 12);
    textButtonFont.setStyleStrategy(QFont::PreferQuality);
    _textButtonIcon->setFont(textButtonFont);
    _textButtonIcon->setText("\uf059");    // set icon to "pen" icon
    _textButtonIcon->setAlignment(Qt::AlignLeft);

    _textButtonLabel = new QLabel(_textButtonWidget);
    _textButtonLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
    _textButtonLabel->setText("About");
    _textButtonLabel->setAlignment(Qt::AlignLeft);

    // Add text button contents to layout
    _textButtonLayout->addWidget(_textButtonIcon);
    _textButtonLayout->addWidget(_textButtonLabel);
    _textButtonIcon->show();
    _textButtonLabel->show();

    // Set text button child widget
    _textButton->setChildWidget(_textButtonWidget);
    _textButtonWidget->show();

    // Return newly generated text button
    return _textButton;
}
