// This file Copyright © Mnemosyne LLC.
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
// or any future license endorsed by Mnemosyne LLC.
// License text can be found in the licenses/ folder.

#include <QTimer>

#include "ColumnResizer.h"
#include "Formatter.h"
#include "Session.h"
#include "StatsDialog.h"

namespace
{
int constexpr RefreshIntervalMsec = 15 * 1000;
}

StatsDialog::StatsDialog(Session& session, QWidget* parent)
    : BaseDialog{ parent }
    , session_{ session }
{
    ui_.setupUi(this);

    auto* cr = new ColumnResizer{ this };
    cr->addLayout(ui_.currentSessionSectionLayout);
    cr->addLayout(ui_.totalSectionLayout);
    cr->update();

    timer_.setSingleShot(false);
    connect(&timer_, &QTimer::timeout, &session_, &Session::refreshSessionStats);
    connect(&session_, &Session::statsUpdated, this, &StatsDialog::updateStats);
    updateStats();
    session_.refreshSessionStats();
}

void StatsDialog::setVisible(bool visible)
{
    timer_.stop();

    if (visible)
    {
        timer_.start(RefreshIntervalMsec);
    }

    BaseDialog::setVisible(visible);
}

void StatsDialog::updateStats()
{
    tr_session_stats const& current(session_.getStats());
    tr_session_stats const& total(session_.getCumulativeStats());

    ui_.currentUploadedValueLabel->setText(Formatter::storage_to_string(current.uploadedBytes));
    ui_.currentDownloadedValueLabel->setText(Formatter::storage_to_string(current.downloadedBytes));
    ui_.currentRatioValueLabel->setText(Formatter::ratio_to_string(current.ratio));
    ui_.currentDurationValueLabel->setText(Formatter::time_to_string(current.secondsActive));

    ui_.totalUploadedValueLabel->setText(Formatter::storage_to_string(total.uploadedBytes));
    ui_.totalDownloadedValueLabel->setText(Formatter::storage_to_string(total.downloadedBytes));
    ui_.totalRatioValueLabel->setText(Formatter::ratio_to_string(total.ratio));
    ui_.totalDurationValueLabel->setText(Formatter::time_to_string(total.secondsActive));

    ui_.startCountLabel->setText(tr("Started %Ln time(s)", nullptr, total.sessionCount));
}
