<?php
// Includi il file di configurazione
require_once "config.php";

// Definisci le variabili e inizializzale con valori vuoti
$username = $password = $confirm_password = $email = "";
$username_err = $password_err = $confirm_password_err = $email_err = "";

// Elabora i dati del modulo quando il modulo viene inviato
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Valida il nome utente
    if (empty(trim($_POST["username"]))) {
        $username_err = "Inserisci un nome utente.";
    } elseif (!preg_match('/^[a-zA-Z0-9_]+$/', trim($_POST["username"]))) {
        $username_err = "Il nome utente può contenere solo lettere, numeri e underscore.";
    } else {
        // Prepara una query di selezione
        $sql = "SELECT id FROM users WHERE username = ?";

        if ($stmt = mysqli_prepare($link, $sql)) {
            // Associa le variabili alla query preparata come parametri
            mysqli_stmt_bind_param($stmt, "s", $param_username);

            // Imposta i parametri
            $param_username = trim($_POST["username"]);

            // Tentativo di eseguire la query preparata
            if (mysqli_stmt_execute($stmt)) {
                /* memorizza il risultato */
                mysqli_stmt_store_result($stmt);

                if (mysqli_stmt_num_rows($stmt) == 1) {
                    $username_err = "Questo nome utente è già stato preso.";
                } else {
                    $username = trim($_POST["username"]);
                }
            } else {
                echo "Ops! Qualcosa è andato storto. Riprova più tardi.";
            }

            // Chiudi la query preparata
            mysqli_stmt_close($stmt);
        }
    }

    // Valida l'email
    if (empty(trim($_POST["email"]))) {
        $email_err = "Inserisci un indirizzo email.";
    } elseif (!filter_var(trim($_POST["email"]), FILTER_VALIDATE_EMAIL)) {
        $email_err = "Formato email non valido.";
    } else {
        $email = trim($_POST["email"]);
    }

    // Valida la password
    if (empty(trim($_POST["password"]))) {
        $password_err = "Inserisci una password.";
    } elseif (strlen(trim($_POST["password"])) < 6) {
        $password_err = "La password deve contenere almeno 6 caratteri.";
    } else {
        $password = trim($_POST["password"]);
    }

    // Valida la conferma della password
    if (empty(trim($_POST["confirm_password"]))) {
        $confirm_password_err = "Conferma la password.";
    } else {
        $confirm_password = trim($_POST["confirm_password"]);
        if (empty($password_err) && ($password != $confirm_password)) {
            $confirm_password_err = "La password non corrisponde.";
        }
    }

    // Verifica gli errori di input prima di inserire nel database
    if (empty($username_err) && empty($password_err) && empty($confirm_password_err) && empty($email_err)) {

        // Prepara una query di inserimento
        $sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";

        if ($stmt = mysqli_prepare($link, $sql)) {
            // Associa le variabili alla query preparata come parametri
            mysqli_stmt_bind_param($stmt, "sss", $param_username, $param_email, $param_password);

            // Imposta i parametri
            $param_username = $username;
            $param_email = $email;
            $param_password = password_hash($password, PASSWORD_DEFAULT); // Crea un hash della password

            // Tentativo di eseguire la query preparata
            if (mysqli_stmt_execute($stmt)) {
                // Reindirizza alla pagina di accesso
                header("location: login.php");
            } else {
                echo "Ops! Qualcosa è andato storto. Riprova più tardi.";
            }

            // Chiudi la query preparata
            mysqli_stmt_close($stmt);
        }
    }

    // Chiudi la connessione
    mysqli_close($link);
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Sign Up</title>
    <link rel="stylesheet" href="/src/output.css">
    <link rel="stylesheet" href="/src/input.css">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
    <style>
        @font-face {
        font-family: 'sfpro';
        src: url('fonts/SFPRODISPLAYBOLD.ttf') format('truetype');
        }

        body{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .all-signup-container {
            width: 100vw;
            height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: #1E1E1E;
        }

        .signup-container {
            width: 400px;
            height: 600px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: space-between;
            background-color: #323232;
            border-radius: 20px;
            padding: 45px;
        }

        .signup-title {
            color: #FFF;
            font-family: Montserrat;
            font-size: 25px;
            font-style: normal;
            font-weight: 700;
            line-height: normal;
            text-align: center;
        }

        .fields-container {
            width: 100%;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            gap: 30px;
        }

        .title-icon-field {
            display: flex;
            justify-content: space-between;
            align-items: start;
        }

        .field-title{
            font-family: "sfpro";
            font-size: 18px;
            width: 100%;
            background: none;
            border: none;
            outline: none;
            color: #FFF;
        }

        .field-title::placeholder{
            color: #696969;
        }

        hr{
            border: 0.5px solid #696969;
            width: 100%;        
        }

        .field{
            display: flex;
            flex-direction: column;
            gap: 10px;
        }

        .button-accesslink-container{
            display: flex;
            flex-direction: column;
            gap: 10px;
        }

        .signup-button{
            width: 100%;
            height: 50px;
            background-color: #67FFAC;
            border-radius: 100px;
            border: none;
            outline: none;
            font-family: "sfpro";
            font-size: 15px;
            color: #323232;
            cursor: pointer;
        }

        .access-link{
            color: #FFF;
            font-family: "sfpro";
            font-size: 13px;
            font-style: normal;
            text-align: center;
        }

        .access-link a{
            color: #67FFAC;
            text-decoration: underline;
        }

        .title-icon-field img{
            width: 25px;
            height: 25px;
        }
    </style>
</head>
<body>
<div class="all-signup-container">

<form id="mainForm" class="signup-container" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
    <div class="signup-title">Registrazione</div>
    <div class="fields-container">

        <div class="field">
            <div class="title-icon-field">
                <input type="text" class="field-title" placeholder="Nome" name="username" class="form-control <?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $username; ?>"></input>
                <span class="invalid-feedback"><?php echo $username_err; ?></span>
                <img src="/img/marchi/icons/profile.svg" alt="">
            </div>
            <hr>
        </div>

        <div class="field">
            <div class="title-icon-field">
                <input type="email" class="field-title" placeholder="E-mail" name="email" class="form-control <?php echo (!empty($email_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $email; ?>"></input>
                <span class="invalid-feedback"><?php echo $email_err; ?></span>
                <img src="/img/marchi/icons/mail.svg" alt="">
            </div>
            <hr>
        </div>

        <div class="field">
            <div class="title-icon-field">
                <input type="password" class="field-title" placeholder="Password" name="password" class="form-control <?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $password; ?>"></input>
                <span class="invalid-feedback"><?php echo $password_err; ?></span>
                <img src="/img/marchi/icons/passwd.svg" alt="">
            </div>
            <hr>
        </div>

        <div class="field">
            <div class="title-icon-field">
                <input type="password" class="field-title" placeholder="Conferma Password" name="confirm_password" class="form-control <?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $confirm_password; ?>"></input>
                <span class="invalid-feedback"><?php echo $confirm_password_err; ?></span>
                <img src="/img/marchi/icons/passwd.svg" alt="">
            </div>
            <hr>
        </div>
        
    </div>

    <div class="button-accesslink-container">
        <button type="submit" id="signupButton" class="signup-button">Registrati</button>
        <div class="access-link">Hai già un account? <a href="login.php">Accedi</a></div>
    </div>

</form>

</div>    
</body>
</html>