/*
 *
 * Copyright (C) 2023, KylinSoft Co., Ltd.
 *
 * 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 <https://www.gnu.org/licenses/>.
 *
 *
 */
#include "aptproxydialog.h"
#include <QDebug>
#include <QLineEdit>
#include <QSpacerItem>
#include <QLabel>
#include <QPushButton>
#include "proxy.h"

AptProxyDialog::AptProxyDialog(QWidget *parent ):
    QDialog(parent)
{
    initUi();
    setupComponent();
    initConnect();
}

AptProxyDialog::~AptProxyDialog()
{

}

void AptProxyDialog::initUi()
{
    setWindowTitle(tr("Set APT Proxy"));
    this->setFixedSize(480, 200);

    QVBoxLayout *mAptProxyLyt = new QVBoxLayout(this);
    mAptProxyLyt->setContentsMargins(24, 24, 24, 24);
    mAptProxyLyt->setSpacing(16);

    QFrame *mHostFrame = new QFrame(this);
    mHostFrame->setFixedSize(432, 36);
    mHostFrame->setFrameShape(QFrame::NoFrame);

    QHBoxLayout *mLyt_1= new QHBoxLayout(mHostFrame);
    mLyt_1->setContentsMargins(0, 0, 0, 0);
    mLyt_1->setSpacing(8);

    KLabel *mSetHostLabel = new KLabel(mHostFrame);
    mSetHostLabel->setFixedSize(92, 36);
    mSetHostLabel->setText(tr("Server Address"));

    mHostEdit = new QLineEdit(mHostFrame);
    mHostEdit->setAttribute(Qt::WA_InputMethodEnabled, false);  //限制中文输入法
    mHostEdit->setFixedSize(332, 36);
    mHostEdit->installEventFilter(this);

    mLyt_1->addWidget(mSetHostLabel);
    mLyt_1->addWidget(mHostEdit);

    QFrame *mPortFrame = new QFrame(this);
    mPortFrame->setFixedSize(432, 36);
    mPortFrame->setFrameShape(QFrame::NoFrame);

    QHBoxLayout *mLyt_2= new QHBoxLayout(mPortFrame);
    mLyt_2->setContentsMargins(0, 0, 0, 0);
    mLyt_2->setSpacing(8);

    QLabel *mSetPortLabel = new QLabel(tr("Port") ,mPortFrame);
    mSetPortLabel->setFixedSize(92, 36);

    mPortEdit = new QLineEdit(mPortFrame);
    mPortEdit->setAttribute(Qt::WA_InputMethodEnabled, false);  //限制中文输入法
    mPortEdit->setFixedSize(332, 36);
    mPortEdit->installEventFilter(this);

    mLyt_2->addWidget(mSetPortLabel);
    mLyt_2->addWidget(mPortEdit);

    QFrame *mChooseFrame = new QFrame(this);
    mChooseFrame->setFixedWidth(432);
    mChooseFrame->setFrameShape(QFrame::NoFrame);

    QHBoxLayout *mLyt_3= new QHBoxLayout(mChooseFrame);
    mLyt_3->setContentsMargins(0, 0, 0, 0);
    mLyt_3->setSpacing(16);

    mCancelBtn = new QPushButton(mChooseFrame);
    mCancelBtn->setMinimumWidth(96);
    mCancelBtn->setText(tr("Cancel"));

    mConfirmBtn = new QPushButton(mChooseFrame);
    mConfirmBtn->setMinimumWidth(96);
    mConfirmBtn->setText(tr("Confirm"));

    mLyt_3->addStretch();
    mLyt_3->addWidget(mCancelBtn);
    mLyt_3->addWidget(mConfirmBtn);

    mAptProxyLyt->addWidget(mHostFrame);
    mAptProxyLyt->addWidget(mPortFrame);
    mAptProxyLyt->addSpacing(16);
    mAptProxyLyt->addWidget(mChooseFrame);
}

void AptProxyDialog::initConnect()
{
    connect(mHostEdit, &QLineEdit::textEdited, this, [=]() {
        if (mHostEdit->text().isEmpty()) {
             mConfirmBtn->setEnabled(false);
        } else {
            mConfirmBtn->setEnabled(true);
        }
    });

    connect(mCancelBtn, &QPushButton::clicked, this, [=]() {
        this->close();
    });

    connect(mConfirmBtn, &QPushButton::clicked, this, [=]() {
        Proxy::setAptProxy(mHostEdit->text() , mPortEdit->text() , true);
        this->close();
    });
}

void AptProxyDialog::setupComponent()
{
    QString host = Proxy::getAptProxy()["ip"].toString();
    QString port = Proxy::getAptProxy()["port"].toString();;

    mHostEdit->setText(host);
    mPortEdit->setText(port);

    if (host.isEmpty()) {
        mConfirmBtn->setEnabled(false);
    }
}
