<?php
/**
 * Endpoint für das Anfrage-Formular (Footer-Modal).
 * Nimmt einen POST entgegen, validiert die Felder und versendet die Anfrage
 * per SMTP. Antwortet mit JSON: { ok: bool, message: string }.
 */

declare(strict_types=1);

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception as MailException;

header('Content-Type: application/json; charset=utf-8');

/** Antwort als JSON ausgeben und beenden. */
function respond(bool $ok, string $message, int $status = 200): never
{
    http_response_code($status);
    echo json_encode(['ok' => $ok, 'message' => $message], JSON_UNESCAPED_UNICODE);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    respond(false, 'Methode nicht erlaubt.', 405);
}

$config = require __DIR__ . '/config.php';
require __DIR__ . '/../../vendor/autoload.php';

/** Helfer: getrimmter String aus dem POST. */
$field = static function (string $key): string {
    return isset($_POST[$key]) && is_string($_POST[$key]) ? trim($_POST[$key]) : '';
};

// Spam-Schutz: Honeypot-Felder müssen leer sein. Wir tun so, als sei alles gut.
if ($field('company') !== '' || $field('url') !== '') {
    respond(true, 'Danke. Ihre Anfrage wurde aufgenommen.');
}

$name    = $field('name');
$email   = $field('email');
$message = $field('message');
$privacy = isset($_POST['privacy']);

// Validierung
$errors = [];
if ($name === '') {
    $errors[] = 'Name fehlt';
}
if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Gültige E-Mail-Adresse fehlt';
}
if ($message === '') {
    $errors[] = 'Nachricht fehlt';
}
if (!$privacy) {
    $errors[] = 'Datenschutz nicht akzeptiert';
}
if ($errors !== []) {
    respond(false, 'Bitte prüfen Sie Ihre Eingaben: ' . implode(', ', $errors) . '.', 422);
}

// Mail zusammenbauen und versenden
$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host       = $config['smtp_host'];
    $mail->SMTPAuth   = true;
    $mail->Username   = $config['smtp_user'];
    $mail->Password   = $config['smtp_pass'];
    $mail->SMTPSecure = $config['smtp_secure'] === 'tls'
        ? PHPMailer::ENCRYPTION_STARTTLS
        : PHPMailer::ENCRYPTION_SMTPS;
    $mail->Port       = (int) $config['smtp_port'];
    $mail->CharSet    = PHPMailer::CHARSET_UTF8;

    $mail->setFrom($config['from_email'], $config['from_name']);
    $mail->addAddress($config['to_email'], $config['to_name']);
    $mail->addReplyTo($email, $name);

    $mail->Subject = $config['subject'];

    $plain = "Neue Anfrage über markemacht.de\n\n"
        . "Name: {$name}\n"
        . "E-Mail: {$email}\n\n"
        . "Nachricht:\n{$message}\n";

    $esc      = static fn (string $v): string => htmlspecialchars($v, ENT_QUOTES, 'UTF-8');
    $htmlBody = '<h2>Neue Anfrage über markemacht.de</h2>'
        . '<p><strong>Name:</strong> ' . $esc($name) . '<br>'
        . '<strong>E-Mail:</strong> ' . $esc($email) . '</p>'
        . '<p><strong>Nachricht:</strong></p>'
        . '<p>' . nl2br($esc($message)) . '</p>';

    $mail->isHTML(true);
    $mail->Body    = $htmlBody;
    $mail->AltBody = $plain;

    $mail->send();
    respond(true, 'Danke. Ihre Anfrage wurde versendet.');
} catch (MailException $e) {
    error_log('Anfrage-Versand fehlgeschlagen: ' . $mail->ErrorInfo);
    respond(false, 'Versand fehlgeschlagen. Bitte versuchen Sie es später erneut oder schreiben Sie an info@markemacht.de.', 500);
}
