// SPDX-License-Identifier: BSD-3-Clause
// SPDX-FileCopyrightText: The Monero Project

#include "TorInfoDialog.h"
#include "ui_TorInfoDialog.h"

#include "utils/TorManager.h"

TorInfoDialog::TorInfoDialog(QWidget *parent)
        : QDialog(parent)
        , ui(new Ui::TorInfoDialog)
{
    ui->setupUi(this);

    ui->logs->setPlainText(torManager()->torLogs);

    this->onStatusChanged(torManager()->errorMsg);
    this->onConnectionStatusChanged(torManager()->torConnected);

    connect(torManager(), &TorManager::statusChanged, this, &TorInfoDialog::onStatusChanged);
    connect(torManager(), &TorManager::connectionStateChanged, this, &TorInfoDialog::onConnectionStatusChanged);
    connect(torManager(), &TorManager::logsUpdated, this, &TorInfoDialog::onLogsUpdated);

    this->adjustSize();
}

void TorInfoDialog::onLogsUpdated() {
    ui->logs->setPlainText(torManager()->torLogs);
}

void TorInfoDialog::onConnectionStatusChanged(bool connected) {
    if (!torManager()->isStarted()) {
        ui->icon_connectionStatus->setPixmap(QPixmap(":/assets/images/status_offline.svg").scaledToWidth(16, Qt::SmoothTransformation));
        ui->label_testConnectionStatus->setText("Not running");
    }
    else if (connected) {
        ui->icon_connectionStatus->setPixmap(QPixmap(":/assets/images/status_connected.svg").scaledToWidth(16, Qt::SmoothTransformation));
        ui->label_testConnectionStatus->setText("Connected");
    }
    else {
        ui->icon_connectionStatus->setPixmap(QPixmap(":/assets/images/status_disconnected.svg").scaledToWidth(16, Qt::SmoothTransformation));
        ui->label_testConnectionStatus->setText("Disconnected");
    }
}

void TorInfoDialog::onStatusChanged(const QString &msg) {
    ui->message->setText(msg);

    if (msg.isEmpty()) {
        ui->message->hide();
    }
}

TorInfoDialog::~TorInfoDialog() {
    disconnect(torManager(), nullptr, this, nullptr);
}