/*
 * Squawk messenger. 
 * Copyright (C) 2019 Yury Gubich <blue@macaw.me>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "badge.h"

#include "shared/utils.h"

Badge::Badge(const QString& p_id, const QString& p_text, const QIcon& icon, QWidget* parent):
    QFrame(parent),
    id(p_id),
    image(new QLabel()),
    text(new QLabel(p_text)),
    closeButton(new QPushButton()),
    layout(new QHBoxLayout(this))
{
    createMandatoryComponents();
    
    image->setPixmap(icon.pixmap(25, 25));

    layout->addWidget(image);
    layout->addWidget(text);
    layout->addWidget(closeButton);
}

Badge::Badge(QWidget* parent):
    QFrame(parent),
    id(Shared::generateUUID()),
    image(nullptr),
    text(nullptr),
    closeButton(new QPushButton()),
    layout(new QHBoxLayout(this))
{
    createMandatoryComponents();

    layout->addWidget(closeButton);
}

void Badge::setIcon(const QIcon& icon) {
    if (image == nullptr) {
        image = new QLabel();
        image->setPixmap(icon.pixmap(25, 25));
        layout->insertWidget(0, image);
    } else {
        image->setPixmap(icon.pixmap(25, 25));
    }
}

void Badge::setText(const QString& p_text) {
    if (text == nullptr) {
        text = new QLabel(p_text);
        int index = 0;
        if (image != nullptr) {
            index = 1;
        }
        layout->insertWidget(index, text);
    } else {
        text->setText(p_text);
    }
}

Badge::~Badge() {
    if (image != nullptr)
        delete image;

    if (text != nullptr)
        delete text;

    delete closeButton;
}

void Badge::createMandatoryComponents() {
    setBackgroundRole(QPalette::Base);
    //setAutoFillBackground(true);
    setFrameStyle(QFrame::StyledPanel);
    setFrameShadow(QFrame::Raised);

    QIcon tabCloseIcon = QIcon::fromTheme("tab-close");
    if (tabCloseIcon.isNull())
        tabCloseIcon.addFile(QString::fromUtf8(":/images/fallback/dark/big/edit-none.svg"), QSize(), QIcon::Normal, QIcon::Off);

    closeButton->setIcon(tabCloseIcon);

    closeButton->setMaximumHeight(25);
    closeButton->setMaximumWidth(25);
    layout->setContentsMargins(2, 2, 2, 2);
    connect(closeButton, &QPushButton::clicked, this, &Badge::closeClicked);
}