// SPDX-License-Identifier: LGPL-2.1-or-later
//
// SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de>
//

// Self
#include "PluginAboutDialog.h"

// Marble
#include "MarbleDirs.h"
#include "ui_MarbleAboutDialog.h"

// Qt
#include <QTextStream>

namespace Marble
{

// The index of the "Data" tab.
int dataTabIndex = 2;

class PluginAboutDialogPrivate
{
public:
    PluginAboutDialogPrivate() = default;
    ~PluginAboutDialogPrivate() = default;

    Ui::MarbleAboutDialog u_dialog;
};

PluginAboutDialog::PluginAboutDialog(QWidget *parent)
    : QDialog(parent)
    , d(new PluginAboutDialogPrivate())
{
    d->u_dialog.setupUi(this);

    setAboutText(QString());
    setAuthorsText(QString());
    setDataText(QString());
    setLicenseAgreementText(QString());
}

PluginAboutDialog::~PluginAboutDialog()
{
    delete d;
}

void PluginAboutDialog::setName(const QString &name)
{
    d->u_dialog.m_pMarbleTitleLabel->setText(name);
    setWindowTitle(tr("About %1").arg(name));
}

void PluginAboutDialog::setVersion(const QString &version)
{
    d->u_dialog.m_pMarbleVersionLabel->setText(tr("Version %1").arg(version));
}

void PluginAboutDialog::setIcon(const QIcon &icon)
{
    d->u_dialog.m_pMarbleLogoLabel->setPixmap(icon.pixmap(64, 64));
}

void PluginAboutDialog::setAboutText(const QString &about)
{
    d->u_dialog.m_pMarbleAboutBrowser->setText(about);
}

void PluginAboutDialog::setAuthors(const QList<PluginAuthor> &authors)
{
    QString string;
    for (const PluginAuthor &author : authors) {
        string += author.name + QLatin1StringView("\n    ") + author.email + QLatin1StringView("\n    ") + author.task + QLatin1StringView("\n\n");
    }

    setAuthorsText(string);
}

void PluginAboutDialog::setAuthorsText(const QString &authors)
{
    d->u_dialog.m_pMarbleAuthorsBrowser->setText(authors);
}

void PluginAboutDialog::setDataText(const QString &data)
{
    if (data.isNull()) {
        d->u_dialog.tabWidget->removeTab(d->u_dialog.tabWidget->indexOf(d->u_dialog.m_dataTab));
    } else {
        d->u_dialog.tabWidget->insertTab(dataTabIndex, d->u_dialog.m_dataTab, tr("Data"));
        d->u_dialog.m_pMarbleDataBrowser->setText(data);
    }
}

void PluginAboutDialog::setLicense(PluginAboutDialog::LicenseKey license)
{
    QString filename;
    switch (license) {
    case PluginAboutDialog::License_LGPL_V2:
        filename = QStringLiteral("lgpl2.txt");
        break;
    default:
        filename = QStringLiteral("lgpl2.txt");
    }

    const QString path = MarbleDirs::path(QLatin1StringView("licenses/") + filename);
    QTextBrowser *browser = d->u_dialog.m_pMarbleLicenseBrowser;
    browser->setText(QString());
    if (!path.isEmpty()) {
        QFile f(path);
        if (f.open(QIODevice::ReadOnly)) {
            QTextStream ts(&f);
            browser->setText(ts.readAll());
        }
        f.close();
    }
}

void PluginAboutDialog::setLicenseAgreementText(const QString &license)
{
    if (license.isNull()) {
        setLicense(PluginAboutDialog::License_LGPL_V2);
    } else {
        d->u_dialog.m_pMarbleLicenseBrowser->setText(license);
    }
}

} // namespace Marble

#include "moc_PluginAboutDialog.cpp"
