<?php
// example-repository-usage.php - Beispiele für die Verwendung des UserRepository

require_once 'bootstrap.php';

use Entity\User;
use Repository\UserRepository;

/** @var UserRepository $userRepo */
$userRepo = $entityManager->getRepository(User::class);

// Beispiel 1: Neuen User erstellen und speichern
function createUser($userRepo, $username, $email, $password)
{
    $user = new User();
    $user->setUsername($username);
    $user->setEmail($email);
    $user->setPassword(password_hash($password, PASSWORD_DEFAULT));

    $userRepo->save($user);

    echo "User erstellt mit ID: " . $user->getId() . "\n";
    return $user;
}

// Beispiel 2: User nach ID finden
function getUserById($userRepo, $id)
{
    $user = $userRepo->findById($id);

    if ($user) {
        echo "User gefunden: " . $user->getUsername() . "\n";
    } else {
        echo "User nicht gefunden\n";
    }

    return $user;
}

// Beispiel 3: User nach Username finden
function getUserByUsername($userRepo, $username)
{
    $user = $userRepo->findByUsername($username);

    if ($user) {
        echo "User gefunden: " . $user->getEmail() . "\n";
    } else {
        echo "User nicht gefunden\n";
    }

    return $user;
}

// Beispiel 4: User nach Email finden
function getUserByEmail($userRepo, $email)
{
    $user = $userRepo->findByEmail($email);

    if ($user) {
        echo "User gefunden: " . $user->getUsername() . "\n";
    } else {
        echo "User nicht gefunden\n";
    }

    return $user;
}

// Beispiel 5: Alle User abrufen
function getAllUsers($userRepo)
{
    $users = $userRepo->findAllUsers();

    echo "Anzahl User: " . count($users) . "\n";
    foreach ($users as $user) {
        echo "- " . $user->getUsername() . " (" . $user->getEmail() . ")\n";
    }

    return $users;
}

// Beispiel 6: Prüfen ob Username existiert
function checkUsernameExists($userRepo, $username)
{
    $exists = $userRepo->usernameExists($username);

    echo "Username '$username' existiert: " . ($exists ? 'Ja' : 'Nein') . "\n";

    return $exists;
}

// Beispiel 7: Prüfen ob Email existiert
function checkEmailExists($userRepo, $email)
{
    $exists = $userRepo->emailExists($email);

    echo "Email '$email' existiert: " . ($exists ? 'Ja' : 'Nein') . "\n";

    return $exists;
}

// Beispiel 8: User suchen (LIKE)
function searchUsers($userRepo, $search)
{
    $users = $userRepo->searchByUsername($search);

    echo "Gefundene User für '$search': " . count($users) . "\n";
    foreach ($users as $user) {
        echo "- " . $user->getUsername() . "\n";
    }

    return $users;
}

// Beispiel 9: User zählen
function countAllUsers($userRepo)
{
    $count = $userRepo->countUsers();

    echo "Gesamtanzahl User: $count\n";

    return $count;
}

// Beispiel 10: User nach Erstellungsdatum finden
function getRecentUsers($userRepo, $daysAgo = 7)
{
    $date = new DateTime();
    $date->modify("-$daysAgo days");

    $users = $userRepo->findByCreatedAfter($date);

    echo "User erstellt in den letzten $daysAgo Tagen: " . count($users) . "\n";
    foreach ($users as $user) {
        echo "- " . $user->getUsername() . " (" . $user->getCreatedAt()->format('Y-m-d H:i:s') . ")\n";
    }

    return $users;
}

// Beispiel 11: User aktualisieren
function updateUser($userRepo, $id, $newEmail)
{
    $user = $userRepo->findById($id);

    if ($user) {
        $user->setEmail($newEmail);
        $userRepo->save($user);
        echo "User aktualisiert\n";
    } else {
        echo "User nicht gefunden\n";
    }
}

// Beispiel 12: User löschen
function deleteUser($userRepo, $id)
{
    $user = $userRepo->findById($id);

    if ($user) {
        $userRepo->delete($user);
        echo "User gelöscht\n";
    } else {
        echo "User nicht gefunden\n";
    }
}

// Verwendungsbeispiele (auskommentiert):
// createUser($userRepo, 'john_doe', 'john@example.com', 'secret123');
// getUserById($userRepo, 1);
// getUserByUsername($userRepo, 'john_doe');
// getUserByEmail($userRepo, 'john@example.com');
// getAllUsers($userRepo);
// checkUsernameExists($userRepo, 'john_doe');
// checkEmailExists($userRepo, 'john@example.com');
// searchUsers($userRepo, 'john');
// countAllUsers($userRepo);
// getRecentUsers($userRepo, 7);
// updateUser($userRepo, 1, 'newemail@example.com');
// deleteUser($userRepo, 1);
