<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
session_start();

// Datenbankverbindung herstellen (passen Sie die Zugangsdaten an)
$servername = "rdbms.strato.de"; // Servername
$username = "dbu3578884"; // Benutzername
$password = "L3E&]_udnPXe9r^"; // Passwort
$dbname = "dbs12181487"; // Name der Datenbank

$conn = new mysqli($servername, $username, $password, $dbname);

// Überprüfen Sie die Verbindung
if ($conn->connect_error) {
    die("Verbindung zur Datenbank fehlgeschlagen: " . $conn->connect_error);
}

// Das Formular wurde gesendet
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
    $raw_password = $_POST['password'];
    $gender = filter_input(INPUT_POST, 'gender', FILTER_SANITIZE_STRING);

    // Überprüfen, ob der Benutzername den Anforderungen entspricht
    if (preg_match('/[A-Za-zÄÜÖäüö]{3,}\s[A-Za-zÄÜÖäüö]{3,}/', $username)) {
        // Der Benutzername entspricht den Anforderungen, daher fortfahren

        // Überprüfen, ob das Passwort mindestens 8 Zeichen hat
        if (strlen($raw_password) >= 8) {
            // Das Passwort entspricht den Anforderungen

            // Überprüfen, ob der Benutzername bereits vorhanden ist
            $check_sql = "SELECT * FROM users WHERE username = ?";
            $check_stmt = $conn->prepare($check_sql);
            $check_stmt->bind_param("s", $username);
            $check_stmt->execute();
            $check_result = $check_stmt->get_result();

            if ($check_result->num_rows > 0) {
                // Benutzername bereits vergeben, zeigen Sie eine Fehlermeldung an
                $error_messagename = 'Dieser Name ist bereits vergeben.';
            } else {
                // Der Benutzername ist eindeutig, daher fortfahren
                // Bereinigen und hashen Sie das Passwort
                $password = password_hash($raw_password, PASSWORD_DEFAULT);

                // Verzeichnis zum Speichern der Bilder
                $uploadVerzeichnis = "uploads/";

                // Überprüfen Sie, ob eine Datei hochgeladen wurde
                if ($_FILES["profileImage"]["error"] == UPLOAD_ERR_OK) {
                    $fileType = $_FILES["profileImage"]["type"];
                    $fileSize = $_FILES["profileImage"]["size"];

                    // Überprüfen Sie, ob es sich um ein gültiges Bild handelt
                    if (strpos($fileType, "image/") === 0 && $fileSize <= 5000000) { // Maximal 5 MB
                        // Den Dateinamen generieren (z. B. ein eindeutiger Name basierend auf der Benutzer-ID)
                        $dateiname = uniqid() . "_" . $_FILES["profileImage"]["name"];

                        // Den vollständigen Pfad zum Zielverzeichnis erstellen
                        $zielPfad = $uploadVerzeichnis . $dateiname;

                        // Das Bild in das Zielverzeichnis verschieben
                        if (move_uploaded_file($_FILES["profileImage"]["tmp_name"], $zielPfad)) {


                            // Der Upload und die Bearbeitung waren erfolgreich, daher speichern Sie den Pfad in der Datenbank
                            $sql = "INSERT INTO users (username, password, gender, profile_image_path)
                                    VALUES (?, ?, ?, ?)";
                            $stmt = $conn->prepare($sql);

                            if ($stmt === false) {
                                $error_messagesql = 'Vorbereitung der SQL-Abfrage ist fehlgeschlagen: ' . $conn->error;
                            } else {
                                $stmt->bind_param("ssss", $username, $password, $gender, $zielPfad);

                                try {
                                    if ($stmt->execute()) {
                                        // Benutzer wurde erfolgreich angelegt
                                        // Weiterleitung zur Login-Seite (login.html)
                                        header("Location: login.php");
                                        exit();
                                    } else {
                                        // Fehler beim Einfügen des Benutzers
                                        $error_messagesql = 'Fehler bei der Ausführung der SQL-Abfrage.';
                                    }
                                } catch (Exception $e) {
                                    echo '<p class="error-message">Fehler: ' . $e->getMessage() . '</p>';
                                }

                                $stmt->close();
                            }
                        } else {
                            $error_messagepic = 'Fehler beim Hochladen des Bildes.';
                        }
                    } else {
                        $error_messagepic = 'Ungültiges Bildformat oder zu groß (max. 5 MB).';
                    }
                } else {
                    $error_messagepic = 'Fehler beim Hochladen des Bildes.';
                }
            }
        } else {
            // Passwort entspricht nicht den Anforderungen
            $error_messagepw = 'Das Passwort muss mindestens 8 Zeichen lang sein';
        }
    } else {
        // Benutzername entspricht nicht den Anforderungen
        $error_messagename = 'Bitte Vor und Nachname eingeben. <br>Zahlen und Sonderzeichen sind nicht erlaubt';
    }
}

// Datenbankverbindung schließen
$conn->close();

// Funktion zum Skalieren und Zuschneiden des Bildes
function scaleAndCropImage($sourcePath, $destPath, $destWidth, $destHeight) {
    list($sourceWidth, $sourceHeight, $sourceType) = getimagesize($sourcePath);
    
    // Ein neues Bild mit der Zielgröße erstellen
    $destImage = imagecreatetruecolor($destWidth, $destHeight);

    switch ($sourceType) {
        case IMAGETYPE_JPEG:
            $sourceImage = imagecreatefromjpeg($sourcePath);
            break;

        case IMAGETYPE_PNG:
            $sourceImage = imagecreatefrompng($sourcePath);
            break;

        case IMAGETYPE_GIF:
            $sourceImage = imagecreatefromgif($sourcePath);
            break;

        default:
            // Bildtyp wird nicht unterstützt
            return;
    }

    // Das Bild auf die Zielgröße skalieren
    imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $destWidth, $destHeight, $sourceWidth, $sourceHeight);

    switch ($sourceType) {
        case IMAGETYPE_JPEG:
            imagejpeg($destImage, $destPath, 90);
            break;

        case IMAGETYPE_PNG:
            imagepng($destImage, $destPath, 9);
            break;

        case IMAGETYPE_GIF:
            imagegif($destImage, $destPath);
            break;
    }

    // Speicher freigeben
    imagedestroy($sourceImage);
    imagedestroy($destImage);
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Kingz Vote by Bekim Jahmurataj</title>
        <link rel="stylesheet" href="css/styles copy.css">
    </head>
    <body>
        <div class="container">
            <img class="heady" src="img/Unbenannt-1.png" alt="">
            <div class="header">
                <h2>Registrierung</h2>
            </div>
            <div id="step">
                <!-- Das Registrierungsformular -->
                <form id="registrationForm" enctype="multipart/form-data" method="POST">
                    <div class="errorsql">
                        <?php
                    if (isset($error_messagesql)) {
                        echo '<p class="error-message" style="text-align: center; font-size: 3vw;">' . $error_messagesql . '</p>';
                    }
                    ?>
                    </div>
                    <div class="fullname">
                        <label class="label1" for="username">
                            Vorname Nachname
                        </label>
                        <input
                            type="text"
                            id="username"
                            name="username"
                            placeholder="Max Mustermann"
                            required="required"
                            value="<?php echo isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''; ?>">
                        <div class="errorname">
                            <?php
                    if (isset($error_messagename)) {
                        echo '<p class="error-message" style="text-align: center; font-size: 3vw;">' . $error_messagename . '</p>';
                    }
                    ?>
                        </div>
                    </div>
                    <div class="password">
                        <label class="label1" for="password">
                            Password
                        </label>
                        <input
                            type="password"
                            id="password"
                            name="password"
                            placeholder="Password eingeben"
                            required="required">
                        <div class="error-pw">
                            <?php
                    if (isset($error_messagepw)) {
                        echo '<p class="error-message" style="text-align: center; font-size: 3vw;">' . $error_messagepw . '</p>';
                    }
                    ?>
                        </div>
                    </div>
                    <div class="picure">
                        <label class="label1" for="profileImage">
                            Profilbild
                        </label>
                        <input
                            type="file"
                            id="profileImage"
                            name="profileImage"
                            accept="image/*"
                            required="required">
                        <button id="customFileUpload">
                            Bild auswählen
                            <span id="fileStatusIcon">
                                &#10003;
                            </span>
                        </button>
                        <div class="error-pic">
                            <?php
                    if (isset($error_messagepic)) {
                        echo '<p class="error-message" style="text-align: center; font-size: 3vw;">' . $error_messagepic . '</p>';
                    }
                    ?>
                        </div>
                    </div>
                    <div class="gender">
                        <label class="label1" for="gender">
                            Geschlecht
                        </label>
                        <select id="gender" name="gender" required="required">
                            <option
                                value=""
                                disabled="disabled"
                                <?php if (!isset($_POST['gender'])) echo 'selected'; ?>>
                                Bitte wählen
                            </option>
                            <option
                                value="male"
                                <?php if (isset($_POST['gender']) && $_POST['gender'] === 'male') echo 'selected'; ?>>
                                Männlich
                            </option>
                            <option
                                value="female"
                                <?php if (isset($_POST['gender']) && $_POST['gender'] === 'female') echo 'selected'; ?>>
                                Weiblich
                            </option>
                        </select>
                    </div>
                    <div class="center">
                        <button type="submit" id="registerButton">
                            Registrieren
                        </button>
                        <p class="untertitel"></p>
                    </div>
                </form>
            </div>
        </div>
        <script>
//USERNAME
document
    .getElementById('username')
    .addEventListener('focus', function () {
        // Löschen Sie die Fehlermeldung, wenn das Eingabefeld fokussiert wird
        var errorElement = document.querySelector('.errorname p');
        if (errorElement) {
            errorElement.remove();
        }
    });
//PASSWORD
document
    .getElementById('password')
    .addEventListener('focus', function () {
        var errorElement = document.querySelector('.error-pw p');
        if (errorElement) {
            errorElement.remove();
        }
    });
//BILD
document
    .querySelector('.picure')
    .addEventListener('click', function () {
        var errorElement = document.querySelector('.error-pic p');
        if (errorElement) {
            errorElement.remove();
        }
    });
//JAVA FÜR BILD BUDDON AUSSEHEN
document
    .getElementById('customFileUpload')
    .addEventListener('click', function (e) {
        e.preventDefault();
        document
            .getElementById('profileImage')
            .click();
    });

document
    .getElementById('profileImage')
    .addEventListener('change', function () {
        var selectedFileName = this
            .files[0]
            .name;
        document
            .getElementById('fileStatusIcon')
            .textContent = selectedFileName;

        // Überprüfen, ob ein Bild ausgewählt wurde, und den "Registrieren"-Button
        // aktivieren/deaktivieren
        var registerButton = document.getElementById('registerButton');
        if (selectedFileName) {
            registerButton.removeAttribute('disabled');
        } else {
            registerButton.setAttribute('disabled', 'disabled');
        }
    });
//JAVASCRIPT FÜR ÄNDERN DES BILDAUSWÄHLEN MIT HACKEN
document
    .getElementById('profileImage')
    .addEventListener('change', function () {
        var selectedFileName = this.files[0]
            ? '✓'
            : 'Choose a file';
        document
            .getElementById('customFileUpload')
            .textContent = selectedFileName;

        if (this.files[0]) {
            document
                .getElementById('customFileUpload')
                .appendChild(document.createElement('span'));
            document
                .getElementById('customFileUpload')
                .lastChild
                .id = 'fileStatusIcon';
            document
                .getElementById('fileStatusIcon')
                .style
                .display = 'block'; // Hier wird das Display auf 'block' gesetzt
        } else {
            var fileStatusIcon = document.getElementById('fileStatusIcon');
            if (fileStatusIcon) {
                fileStatusIcon.style.display = 'none';
                document
                    .getElementById('customFileUpload')
                    .removeChild(fileStatusIcon);
            }
        }
    });
</script>
    </body>
</html>