#include "dialogloginuseradd.h"
#include "ui_dialogloginuseradd.h"

#include <QMessageBox>

#include "mainwindow.h"

DialogLoginUserAdd::DialogLoginUserAdd(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogLoginUserAdd)
{
    setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::Popup);

    ui->setupUi(this);

    ui->lineEdit_Password->setEchoMode(QLineEdit::Password);
    ui->lineEdit_Password_Confirm->setEchoMode(QLineEdit::Password);

    ui->label_Password_Check->setVisible(false);

    ui->lineEdit_ID->setFocus();
}

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

void DialogLoginUserAdd::on_pushButton_OK_clicked()
{
    QString strID = ui->lineEdit_ID->text();
    QString strPassword = ui->lineEdit_Password->text();
    QString strPasswordConfirm = ui->lineEdit_Password_Confirm->text();

    if(strPassword!=strPasswordConfirm)
    {
        ui->label_Password_Check->setVisible(true);
    }
    else
    {
        ui->label_Password_Check->setVisible(false);

        bool bSuccess = false;
        // 1. 이 작업을 위한 지역 DB 인스턴스를 생성합니다.
        SUTIL::SDatabase db(QString("AddUser_%1").arg(reinterpret_cast<quintptr>(this)));
        if (db.OpenDatabase("/home/birdhead/test.db") == 0) // 0이 성공
        {
            // 2. 파라미터 바인딩을 사용하여 SQL Injection을 완벽하게 방어합니다.
            QString query = "INSERT INTO LoginUser (LoginID, LoginPassword) VALUES (?, ?);";

            QVariantList params;
            params << strID << strPassword;

            // 3. ExecuteNonQuery의 반환 값(bool)을 확인하여 작업 성공 여부를 판단합니다.
            if (db.ExecuteNonQuery(query, params)) {
                bSuccess = true;
            } else {
                // INSERT 실패 시 (예: 동일한 ID가 이미 존재할 경우) 사용자에게 오류를 알립니다.
                QMessageBox::warning(this, "Creation Failed", "Failed to add new user.\nThe ID might already exist.");
            }
        }
        else
        {
            QMessageBox::critical(this, "Database Error", "Could not connect to the database.");
        }

        // 4. 데이터베이스 작업이 성공했을 때만 다이얼로그를 닫습니다.
        if (bSuccess)
        {
            done(QDialog::Accepted);
        }
    }
}

void DialogLoginUserAdd::on_pushButton_Cancel_clicked()
{
    done(QDialog::Rejected);
}
