<?php
/**
 * @package Hafenstudios\Core
 */

namespace Hafenstudios\Core\Http;

defined( 'ABSPATH' ) || exit;

/**
 * Antwort fuer Links, die ein MENSCH aus einer E-Mail anklickt.
 *
 * Oeffentliche REST-Endpunkte der Flotte (DOI-Bestaetigung, Newsletter-Bestaetigung,
 * Abmeldung) werden von zwei ganz verschiedenen Aufrufern besucht: von Maschinen,
 * die JSON erwarten, und von Empfaengern, die auf einen Link in ihrer Mail klicken.
 * Bekommt der Mensch die JSON-Antwort zu sehen, wirkt das Produkt kaputt
 * (Live-Fund kurato.cloud, 25.07.2026: nach dem Bestaetigungsklick stand roher
 * JSON-Text im Browser).
 *
 * Diese Klasse haelt beide Wege sauber getrennt: Wer HTML akzeptiert, bekommt eine
 * schlichte, eigenstaendige Seite; alle anderen bekommen unveraendert die
 * REST-Antwort. Der Vertrag der API bleibt damit unangetastet.
 *
 * Die Seite ist bewusst ohne Theme gebaut: REST-Anfragen laden kein Theme, und ein
 * Nachladen waere langsam und fehleranfaellig. Sie kommt ohne externe Requests aus
 * (kein Fremd-Font, kein Skript) und respektiert die Farbwahl des Systems.
 */
class BrowserResponse {

	/**
	 * Erwartet der Aufrufer eine HTML-Seite (also ein Browser)?
	 *
	 * @param string $accept Inhalt des Accept-Headers.
	 * @return bool
	 */
	public static function wants_html( string $accept ): bool {
		$accept = strtolower( trim( $accept ) );
		if ( '' === $accept ) {
			return false;
		}
		// Ein Browser nennt text/html an erster Stelle; API-Clients senden
		// application/json oder gar nichts. */* allein reicht NICHT (curl-Default).
		return false !== strpos( $accept, 'text/html' );
	}

	/**
	 * Liest den Accept-Header aus der aktuellen Anfrage.
	 *
	 * @return bool
	 */
	public static function is_browser_request(): bool {
		$accept = isset( $_SERVER['HTTP_ACCEPT'] ) ? (string) $_SERVER['HTTP_ACCEPT'] : '';
		return self::wants_html( $accept );
	}

	/**
	 * Gibt eine Bestaetigungs- oder Hinweisseite aus und beendet die Anfrage.
	 *
	 * @param string $title   Ueberschrift (bereits uebersetzt).
	 * @param string $message Fliesstext (bereits uebersetzt).
	 * @param bool   $success Erfolg (gruener Haken) oder Hinweis (neutral).
	 * @param int    $status  HTTP-Status.
	 * @return void
	 */
	public static function send_page( string $title, string $message, bool $success = true, int $status = 200 ): void {
		/**
		 * Ziel-URL, auf die statt der eingebauten Seite umgeleitet werden soll
		 * (z. B. eine eigene Danke-Seite mit Conversion-Tracking).
		 *
		 * @param string $url     Leer = eingebaute Seite verwenden.
		 * @param bool   $success Erfolg oder Hinweis.
		 * @param string $title   Ueberschrift.
		 */
		$redirect = (string) apply_filters( 'hafenstudios/confirm_page_redirect', '', $success, $title );
		if ( '' !== $redirect ) {
			wp_safe_redirect( $redirect, 302 );
			exit;
		}

		$home      = home_url( '/' );
		$site_name = get_bloginfo( 'name' );

		status_header( $status );
		nocache_headers();
		header( 'Content-Type: text/html; charset=utf-8' );

		echo '<!doctype html><html lang="' . esc_attr( str_replace( '_', '-', get_locale() ) ) . '"><head>';
		echo '<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">';
		echo '<meta name="color-scheme" content="light dark"><meta name="robots" content="noindex, nofollow">';
		echo '<title>' . esc_html( $title ) . ' - ' . esc_html( $site_name ) . '</title>';
		echo '<style>';
		echo ':root{color-scheme:light dark;--bg:#f4f7fb;--karte:#fff;--text:#14263c;--leise:#5d6b7a;--linie:#dbe3ec;--gut:#1f7a5a}';
		echo '@media (prefers-color-scheme:dark){:root{--bg:#0f1a29;--karte:#16243a;--text:#eef3f8;--leise:#a8b6c6;--linie:#26374f;--gut:#4ecfa0}}';
		echo 'body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;line-height:1.6;padding:1.5rem}';
		echo '.karte{background:var(--karte);border:1px solid var(--linie);border-radius:.8rem;padding:2.5rem;max-width:32rem;width:100%;text-align:center}';
		echo '.zeichen{width:3.5rem;height:3.5rem;border-radius:50%;margin:0 auto 1.25rem;display:flex;align-items:center;justify-content:center;font-size:1.8rem;background:var(--bg);color:var(--gut)}';
		echo 'h1{font-size:1.4rem;margin:0 0 .75rem}p{margin:0 0 1.5rem;color:var(--leise)}';
		echo 'a.knopf{display:inline-block;padding:.7rem 1.4rem;border-radius:.4rem;background:var(--text);color:var(--karte);text-decoration:none;font-weight:600}';
		echo '.fuss{margin-top:1.75rem;font-size:.85rem;color:var(--leise)}';
		echo '</style></head><body><main class="karte">';
		echo '<div class="zeichen" aria-hidden="true">' . ( $success ? '&#10003;' : '&#8505;' ) . '</div>';
		echo '<h1>' . esc_html( $title ) . '</h1>';
		echo '<p>' . esc_html( $message ) . '</p>';
		echo '<a class="knopf" href="' . esc_url( $home ) . '">' . esc_html__( 'Zur Website', 'hafenstudios-core' ) . '</a>';
		echo '<p class="fuss">' . esc_html( $site_name ) . '</p>';
		echo '</main></body></html>';
		exit;
	}
}
