<?php
declare(strict_types=1);
require_once __DIR__ . '/app/Helpers/bootstrap.php';
start_session();
ob_start(static function (string $html): string {
    if (language() === 'de') { return $html; }
    return strtr($html, ['<html lang="de">' => '<html lang="en">', 'Bei TripTale anmelden' => t('login.title'), '>Gib deine E-Mail-Adresse ein. Du erhältst einen sicheren Anmeldelink, der 30 Minuten gültig ist. Nach dem Anmelden bleibst du 14 Tage angemeldet und kannst dich jederzeit selbst abmelden.<' => '>' . t('login.intro') . '<', '>Wenn ein aktiver Zugang zu dieser E-Mail-Adresse gehört, wurde ein Anmeldelink versendet.<' => '>' . t('login.sent') . '<', '>E-Mail-Adresse<input' => '>' . t('user_form.email') . '<input', '>Anmeldelink senden<' => '>' . t('login.send') . '<', '>Als Hauptadministrator mit Passwort anmelden<' => '>' . t('login.admin') . '<']);
});
if (logged_in_user() !== null) { header('Location: /dashboard.php'); exit; }
$error = null; $sent = false;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    verify_csrf(); $email = strtolower(trim((string) ($_POST['email'] ?? '')));
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $error = t('login.error_email'); }
    else {
        try {
            $query = db()->prepare('SELECT id,first_name,email,preferred_language FROM '.table('users')." WHERE email=:email AND status='active' AND deleted_at IS NULL LIMIT 1");
            $query->execute([':email'=>$email]); $account=$query->fetch();
            if ($account) {
                $token=bin2hex(random_bytes(32));
                db()->prepare('DELETE FROM '.table('magic_login_tokens').' WHERE expires_at<NOW() OR used_at IS NOT NULL')->execute();
                $insert=db()->prepare('INSERT INTO '.table('magic_login_tokens').' (user_id,token_hash,expires_at) VALUES (:user_id,:token_hash,DATE_ADD(NOW(),INTERVAL 30 MINUTE))');
                $insert->execute([':user_id'=>$account['id'],':token_hash'=>hash('sha256',$token)]);
                $url='https://triptale.willhoff.de/magic-login.php?id='.(int)db()->lastInsertId().'&token='.$token;
                $mailLanguage=(string)($account['preferred_language']??'de');
                $message=str_replace(['{name}','{url}','\\n'],[(string)$account['first_name'],$url,PHP_EOL],t_in_language('login.mail_body',$mailLanguage));
                $headers=triptale_mail_headers();
                if (!triptale_send_mail($account['email'], t_in_language('login.mail_subject',$mailLanguage), $message)) { $error=triptale_mail_failure_message('login.error_send'); }
            }
            if ($error===null) { $sent=true; }
        } catch (Throwable $exception) { $error=t('login.error_create'); }
    }
}
?>
<!doctype html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Bei TripTale anmelden</title><style>body{font-family:system-ui,sans-serif;background:#f4f6f8;margin:0;padding:32px;color:#17202a}main{max-width:460px;margin:auto;background:#fff;padding:28px;border-radius:14px;box-shadow:0 4px 18px #0001}label{display:block;margin-top:14px;font-weight:700}input{box-sizing:border-box;width:100%;margin-top:6px;padding:11px;border:1px solid #b9c1c8;border-radius:7px;font:inherit}button{margin-top:22px;padding:12px 16px;border:0;border-radius:7px;background:#126e82;color:#fff;font-weight:700}.error,.success{padding:12px;border-radius:7px}.error{background:#ffe6e3}.success{background:#e6f5e9}.muted{color:#59636d}.admin-button{display:block;margin-top:12px;padding:10px 14px;border-radius:7px;background:#e3ebee;color:#126e82;text-align:center;text-decoration:none;font-weight:700}@media(max-width:600px){body{padding:12px}main{padding:16px}}</style><link rel="stylesheet" href="/assets/triptale-ui.css?v=19"></head><body><main><h1>TripTale</h1><p class="muted">Gib deine E-Mail-Adresse ein. Du erhältst einen sicheren Anmeldelink, der 30 Minuten gültig ist. Nach dem Anmelden bleibst du 14 Tage angemeldet und kannst dich jederzeit selbst abmelden.</p><?php if($sent): ?><p class="success">Wenn ein aktiver Zugang zu dieser E-Mail-Adresse gehört, wurde ein Anmeldelink versendet.</p><?php endif; ?><?php if($error): ?><p class="error"><?= htmlspecialchars($error,ENT_QUOTES,'UTF-8') ?></p><?php endif; ?><form method="post"><input type="hidden" name="csrf_token" value="<?= htmlspecialchars(csrf_token(),ENT_QUOTES,'UTF-8') ?>"><label>E-Mail-Adresse<input name="email" type="email" required autofocus value="<?= htmlspecialchars((string)($_POST['email']??''),ENT_QUOTES,'UTF-8') ?>"></label><button type="submit">Anmeldelink senden</button></form><a class="admin-button" href="/admin-login.php">Als Hauptadministrator mit Passwort anmelden</a></main></body></html>
