#include "ProxyDialog.h"
#include "ui_ProxyDialog.h"
#include "Settings.h"

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

    // Add different proxy types. We use user data strings for addressing them later
    ui->comboType->addItem(tr("None"), "none");
    ui->comboType->addItem(tr("System settings"), "system");
    ui->comboType->addItem(tr("HTTP"), "http");
    ui->comboType->addItem(tr("SOCKS5"), "socks5");

    // Load current settings
    ui->comboType->setCurrentIndex(ui->comboType->findData(Settings::getValue("proxy", "type").toString()));
    ui->editHost->setText(Settings::getValue("proxy", "host").toString());
    ui->spinPort->setValue(Settings::getValue("proxy", "port").toInt());
    ui->checkAuthentication->setChecked(Settings::getValue("proxy", "authentication").toBool());
    ui->editUser->setText(Settings::getValue("proxy", "user").toString());
    ui->editPassword->setText(Settings::getValue("proxy", "password").toString());
}

ProxyDialog::~ProxyDialog()
{
    delete ui;
}

void ProxyDialog::proxyTypeChanged(int /*new_index*/)
{
    // When selecting the "None" or "System settings" proxy types, disable all the other input fields
    bool proxy_configuration = (ui->comboType->currentData() != "none" && ui->comboType->currentData() != "system");

    ui->editHost->setEnabled(proxy_configuration);
    ui->spinPort->setEnabled(proxy_configuration);
    ui->checkAuthentication->setEnabled(proxy_configuration);
    ui->editUser->setEnabled(ui->checkAuthentication->isChecked() && proxy_configuration);      // Enable user name and password only if the...
    ui->editPassword->setEnabled(ui->checkAuthentication->isChecked() && proxy_configuration);  // ... Authentication Required checkbox is checked
}

void ProxyDialog::authenticationRequiredChanged(bool required)
{
    ui->editUser->setEnabled(required);
    ui->editPassword->setEnabled(required);
}

void ProxyDialog::saveSettings() const
{
    Settings::setValue("proxy", "type", ui->comboType->currentData());
    Settings::setValue("proxy", "host", ui->editHost->text());
    Settings::setValue("proxy", "port", ui->spinPort->value());
    Settings::setValue("proxy", "authentication", ui->checkAuthentication->isChecked());
    Settings::setValue("proxy", "user", ui->editUser->text());
    Settings::setValue("proxy", "password", ui->editPassword->text());
}
