<?php
require __DIR__.'/auth.php';
$isLoggedIn = isLoggedIn();
$isUser = !empty($_SESSION['user_id']);

$flashContact = '';
$formSuccess = false;

define('RATE_LIMIT_WINDOW', 3600);
define('RATE_LIMIT_MAX', 5);

function checkRateLimit($ip) {
    $rateLimitFile = sys_get_temp_dir() . '/contact_ratelimit_' . md5($ip) . '.json';
    $now = time();
    $data = ['attempts' => [], 'blocked_until' => 0];
    
    if (file_exists($rateLimitFile)) {
        $content = @file_get_contents($rateLimitFile);
        if ($content) {
            $data = json_decode($content, true) ?: $data;
        }
    }
    
    if ($data['blocked_until'] > $now) {
        return ['allowed' => false, 'wait' => $data['blocked_until'] - $now];
    }
    
    $data['attempts'] = array_filter($data['attempts'], function($t) use ($now) {
        return $t > ($now - RATE_LIMIT_WINDOW);
    });
    
    if (count($data['attempts']) >= RATE_LIMIT_MAX) {
        $data['blocked_until'] = $now + RATE_LIMIT_WINDOW;
        @file_put_contents($rateLimitFile, json_encode($data), LOCK_EX);
        return ['allowed' => false, 'wait' => RATE_LIMIT_WINDOW];
    }
    
    return ['allowed' => true, 'data' => $data, 'file' => $rateLimitFile];
}

function recordAttempt($rateData) {
    $rateData['data']['attempts'][] = time();
    @file_put_contents($rateData['file'], json_encode($rateData['data']), LOCK_EX);
}

function validateHoneypot($postData) {
    if (!isset($postData['honeypot_field'])) {
        return false;
    }
    if ($postData['honeypot_field'] !== '') {
        return false;
    }
    if (!isset($postData['form_time'])) {
        return false;
    }
    $submitTime = (int)$postData['form_time'];
    if ($submitTime <= 0 || (time() - $submitTime) < 3) {
        return false;
    }
    return true;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    
    if (!validateHoneypot($_POST)) {
        header('HTTP/1.1 400 Bad Request');
        exit;
    }
    
    $rateCheck = checkRateLimit($ip);
    if (!$rateCheck['allowed']) {
        $waitMin = ceil($rateCheck['wait'] / 60);
        $flashContact = "Zu viele Anfragen. Bitte warte {$waitMin} Minuten.";
    } else {
        $csrfToken = $_POST['csrf_token'] ?? '';
        $validCsrf = isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $csrfToken);
        
        if (!$validCsrf) {
            $flashContact = 'Sitzung abgelaufen. Bitte Seite neu laden.';
        } else {
            $name = trim($_POST['name'] ?? '');
            $email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);
            $subject = trim($_POST['subject'] ?? '');
            $message = trim($_POST['message'] ?? '');
            
            if (strlen($name) < 2 || strlen($name) > 100) {
                $flashContact = 'Name muss zwischen 2 und 100 Zeichen lang sein.';
            } elseif (!$email) {
                $flashContact = 'Bitte gib eine gültige E-Mail-Adresse ein.';
            } elseif (strlen($subject) < 3 || strlen($subject) > 200) {
                $flashContact = 'Betreff muss zwischen 3 und 200 Zeichen lang sein.';
            } elseif (strlen($message) < 10 || strlen($message) > 5000) {
                $flashContact = 'Nachricht muss zwischen 10 und 5000 Zeichen lang sein.';
            } else {
                recordAttempt($rateCheck);
                
                mysqli_report(MYSQLI_REPORT_OFF);
                $mysqli = @new mysqli(env('DB_HOST','localhost'),env('DB_USER','websiteuser'),env('DB_PASS','starkesPasswort123'),env('DB_NAME','website'),env('DB_PORT',3306));
                
                if (!$mysqli->connect_errno) {
                    $mysqli->set_charset('utf8mb4');
                    $ua = substr($_SERVER['HTTP_USER_AGENT'] ?? '', 0, 500);
                    $ref = substr($_SERVER['HTTP_REFERER'] ?? '', 0, 500);
                    
                    $stmt = $mysqli->prepare("INSERT INTO contact_messages (name,email,subject,message_text,ip_address,user_agent,referer) VALUES (?,?,?,?,?,?,?)");
                    if ($stmt) {
                        $stmt->bind_param('sssssss', $name, $email, $subject, $message, $ip, $ua, $ref);
                        $ok = $stmt->execute();
                        $flashContact = $ok ? 'Nachricht gesendet!' : 'Senden fehlgeschlagen.';
                        $formSuccess = $ok;
                        $stmt->close();
                    } else {
                        $flashContact = 'Technischer Fehler. Bitte per E-Mail kontaktieren.';
                    }
                    $mysqli->close();
                } else {
                    $flashContact = 'Nachricht konnte nicht gesendet werden. Bitte per E-Mail kontaktieren.';
                }
            }
        }
    }
}

$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
$formTime = time();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<link rel="icon" type="image/png" href="/tribevibe_90x90.png">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="description" content="Kontaktiere das TribeVibe Events - Booking, Fragen und Zusammenarbeit.">
<title>Kontakt – TribeVibe Events</title>
<link href="templatemo-nexus-style.css" rel="stylesheet">
<link href="assets/custom.css" rel="stylesheet">
<style>
:root{--gap:20px;--radius:16px}
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap)}
.contact-card{
  background:rgba(0,0,0,.28);backdrop-filter:saturate(140%) blur(4px);
  border:1px solid rgba(255,255,255,.08);border-radius:var(--radius);padding:24px;
  box-shadow:0 10px 24px rgba(0,0,0,.25)
}
.contact-card h2{font-size:1.3rem;margin:0 0 1rem 0;background:linear-gradient(135deg,var(--primary-cyan),var(--primary-pink));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.form-label{display:block;font-size:.9rem;color:var(--text-secondary);margin:.6rem 0 .4rem}
.form-input,.form-textarea{
  width:100%;padding:.85rem 1rem;border-radius:12px;
  border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.3);color:var(--text-primary);
  font-size:1rem;transition:border-color .2s ease,box-shadow .2s ease
}
.form-input:focus,.form-textarea:focus{outline:none;border-color:var(--primary-cyan);box-shadow:0 0 0 3px rgba(70,230,255,.1)}
.form-textarea{min-height:140px;resize:vertical}
.form-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  padding:.85rem 1.5rem;border-radius:12px;border:none;
  background:linear-gradient(135deg,var(--primary-cyan),var(--primary-purple));
  color:#0a0a0f;font-weight:700;font-size:1rem;cursor:pointer;
  transition:transform .15s ease,box-shadow .25s ease
}
.form-btn:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(70,230,255,.3)}
.flash{margin-bottom:1rem;padding:.8rem 1rem;border-radius:10px;font-size:.95rem}
.flash.success{background:rgba(0,200,150,.15);border:1px solid rgba(0,200,150,.3);color:#00ffc6}
.flash.error{background:rgba(255,77,103,.1);border:1px solid rgba(255,77,103,.2);color:#ff6b7a}
.notice{margin-top:.8rem;font-size:.85rem;color:var(--text-secondary)}
.info-section{margin-top:2rem}
.info-section h3{font-size:1.1rem;margin:0 0 .8rem 0;color:var(--primary-cyan)}
.info-list{list-style:none;padding:0;margin:0}
.info-list li{display:grid;grid-template-columns:max(120px) 1fr;gap:10px;padding:.5rem 0;border-bottom:1px solid rgba(255,255,255,.05)}
.info-list li:last-child{border-bottom:none}
.info-list b{color:var(--text-secondary);font-weight:500}
.legal-section{margin-top:40px}
.legal-section h2{font-size:1.2rem;margin:1.5rem 0 .8rem;color:var(--primary-cyan)}
.legal-section h3{font-size:1rem;margin:1.2rem 0 .5rem;color:var(--text-primary)}
.legal-section p{color:var(--text-secondary);line-height:1.7;margin:.5rem 0}
.legal-section a{color:var(--primary-cyan)}
.honeypot{position:absolute;left:-9999px}
@media (max-width:860px){.contact-grid{grid-template-columns:1fr}}
</style>
</head>
<body id="top">
<?php include __DIR__.'/includes/background.php'; ?>
<?php include __DIR__.'/includes/nav.php'; ?>

<section class="page-hero"><h1>Kontakt</h1></section>

<section class="section" id="kontakt">
  <div class="container contact-grid">
    <div class="contact-card">
      <h2>Schreib uns</h2>
      <?php if($flashContact): ?>
        <div class="flash <?php echo $formSuccess ? 'success' : 'error'; ?>"><?php echo htmlspecialchars($flashContact, ENT_QUOTES, 'UTF-8'); ?></div>
      <?php endif; ?>
      <form method="post" action="/contact">
        <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
        <input type="hidden" name="form_time" value="<?php echo $formTime; ?>">
        <input type="text" name="honeypot_field" class="honeypot" tabindex="-1" autocomplete="off" aria-hidden="true">
        
        <label class="form-label">Name *</label>
        <input class="form-input" type="text" name="name" required autocomplete="name">
        
        <label class="form-label">E-Mail *</label>
        <input class="form-input" type="email" name="email" required autocomplete="email">
        
        <label class="form-label">Betreff *</label>
        <input class="form-input" type="text" name="subject" required>
        
        <label class="form-label">Nachricht *</label>
        <textarea class="form-textarea" name="message" required></textarea>
        
        <div style="margin-top:1.2rem"><button class="form-btn" type="submit">Nachricht senden</button></div>
      </form>
      <p class="notice">Antwort in der Regel innerhalb von 24–48 Stunden.</p>
    </div>
    
    <div class="contact-card">
      <h2>Kontaktdaten</h2>
      <div class="info-section">
        <ul class="info-list">
          <li><b>E-Mail</b><span>contact@tribevibeevents.de</span></li>
          <li><b>Instagram</b><span><a href="https://www.instagram.com/tribevibe_events" target="_blank" rel="noopener">@tribevibe_events</a></span></li>
          <li><b>Standort</b><span>Nürnberg, Deutschland</span></li>
        </ul>
      </div>
      
      <div class="info-section">
        <h3>Booking Anfragen</h3>
        <p style="color:var(--text-secondary)">Für Kollaborationen nutze bitte das Kontaktformular mit dem Betreff "Kollaboration".</p>
      </div>
    </div>
  </div>
</section>

<section class="section legal-section" id="privacy">
  <div class="container">
    <h2>Datenschutzerklärung</h2>
    <ul class="info-list">
      <li><b>Verantwortlich</b><span>TribeVibe Events, siehe Impressum</span></li>
      <li><b>Zwecke</b><span>Beantwortung von Anfragen</span></li>
      <li><b>Rechtsgrundlagen</b><span>Art. 6 Abs. 1 lit. a DSGVO (Einwilligung), lit. b (Vertrag/Anfrage), lit. f (berechtigtes Interesse)</span></li>
      <li><b>Speicherdauer</b><span>Kontaktanfragen: bis Abschluss der Bearbeitung</span></li>
      <li><b>Empfänger</b><span>Nur intern; keine Weitergabe an Dritte ohne Rechtsgrundlage</span></li>
      <li><b>Ihre Rechte</b><span>Auskunft, Berichtigung, Löschung, Einschränkung, Widerspruch, Datenübertragbarkeit</span></li>
    </ul>
    <p class="notice">Details und aktuelle Fassung auf Anfrage.</p>
  </div>
</section>

<section class="section legal-section" id="impressum">
  <div class="container">
    <h2>Impressum</h2>
    <ul class="info-list">
      <li><b>Anbieter</b><span>TribeVibe Events</span></li>
      <li><b>Vertretung</b><span>Andreas Kraus</span></li>
      <li><b>Anschrift</b><span>Orffstraße 17, 90439 Nürnberg, Deutschland</span></li>
      <li><b>Kontakt</b><span>E-Mail: contact@tribevibeevents.de • Telefon: +49 151 42827518</span></li>
    </ul>
    
    <h3>Haftung für Inhalte</h3>
    <p>Als Diensteanbieter sind wir gemäß § 7 Abs. 1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8–10 TMG sind wir jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen.</p>
    
    <h3>Haftung für Links</h3>
    <p>Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Für diese Inhalte wird keine Gewähr übernommen.</p>
    
    <h3>Urheberrecht</h3>
    <p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht.</p>
    
    <h3>Online-Streitbeilegung</h3>
    <p>Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung bereit: <a href="https://ec.europa.eu/consumers/odr" target="_blank" rel="noopener">ec.europa.eu/consumers/odr</a></p>
  </div>
</section>

<?php include __DIR__.'/includes/footer.php'; ?>

<script src="temlatemo-nexus-scripts.js"></script>
<script src="assets/site.js"></script>
</body>
</html>
