<?php

use App\Enumerators\SessionElement;
use App\Wrappers\CAPTCHAWrapper;
use App\Wrappers\DatabaseInteractions;
use App\Wrappers\SQLQueryBuilderWrapper;
use Ramsey\Uuid\Uuid;

require_once __DIR__ . "/../../vendor/autoload.php";


$captchaResponse = $_POST['g-recaptcha-response'];
CAPTCHAWrapper::HandleCaptchaResponse($captchaResponse);

if(!isset($_POST['Username'])) die('No username');
if(!isset($_POST['Password1'])) die('No password');
if(!isset($_POST['Password2'])) die('No confirm password');

if($_POST['Password1'] != $_POST['Password2']) die('Passwords do not match');



$sha512Hash = hash(algo: 'sha512', data: $_POST['Password1'], binary: false);
$hashedPassword = password_hash(password: $sha512Hash, algo: PASSWORD_BCRYPT);

$db = new DatabaseInteractions();

$existingUser = $db->RunSelect(
    queryBuilder: SQLQueryBuilderWrapper::SELECT(
        table: 'Users'
    )
        ->where(cond: 'T.Username LIKE :__username__')
        ->bindValue(name: '__username__', value: $_POST['Username'])
        ->limit(limit: 1)
);

if (!empty($existingUser)) {
    echo "Username already exists. Please choose a different username.";
    die();
}

$userID = Uuid::uuid4()->toString();

$db->RunInsert(
    queryBuilder: SQLQueryBuilderWrapper::INSERT(
        table: 'Users',
    )
        ->set(col: 'ID', value: ':__user_id__')
        ->set(col: 'Username', value: ':__username__')
        ->set(col: 'PasswordHash', value: ':__password_hash__')
        ->bindValue(name: '__user_id__', value: $userID)
        ->bindValue(name: '__username__', value: $_POST['Username'])
        ->bindValue(name: '__password_hash__', value: $hashedPassword)
);

$_SESSION[SessionElement::IS_LOGGED_IN->value] = true;
$_SESSION[SessionElement::USER_ID->value] = $userID;
$_SESSION[SessionElement::USERNAME->value] = $_POST['Username'];

header("Location: /profile");
die();