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

namespace Hafenstudios\Wellenbrecher\Admin;

use Hafenstudios\Core\Core;
use Hafenstudios\Wellenbrecher\Support\ObservationMode;

defined( 'ABSPATH' ) || exit;

/**
 * Onboarding-Checkliste (Bauplan Kap. 8, Muster leadlotse SetupChecklist):
 * datengetrieben und selbstberechnend, auf der Uebersichts-Seite. Zeigt den
 * Weg vom Beobachtungsmodus zum scharf geschalteten Schutz.
 *
 * Bewusst KEIN eigener Fortschritts-Speicher: der Status ergibt sich aus den
 * echten Daten (Aktivierung, Beobachtungsfenster, aktive Flotten-Plugins,
 * konfigurierte Datenschutzseite), nicht aus Flags, die veralten. Sind alle
 * Schritte erledigt, erscheint statt der Liste eine einmalige Hans-Abschluss-
 * Karte (Ein-Karte-pro-Screen regelt das Hans-Framework selbst).
 */
final class SetupChecklist {

	private ObservationMode $observation;

	/**
	 * @param ObservationMode $observation Beobachtungsmodus.
	 */
	public function __construct( ObservationMode $observation ) {
		$this->observation = $observation;
	}

	/**
	 * Rendert die Checkliste - oder, wenn alle Schritte erledigt sind, die
	 * einmalige Hans-Abschluss-Karte.
	 *
	 * @return void
	 */
	public function render(): void {
		$steps = $this->steps();
		$done  = 0;
		foreach ( $steps as $step ) {
			if ( $step['done'] ) {
				$done++;
			}
		}

		if ( $done === count( $steps ) ) {
			// Fertig eingerichtet: Hans-Abschluss-Karte (dismissible). Danach
			// uebernimmt die normale Uebersichts-Karte den Screen.
			Core::instance()->hans()->card(
				array(
					'id'    => 'wellenbrecher_setup_done',
					'motif' => 30,
					'title' => __( 'Klar zum Auslaufen', 'wellenbrecher' ),
					'text'  => __( 'Wellenbrecher ist eingerichtet und scharf geschaltet. Ab jetzt haelt er Kommentare, Registrierungen und Ihre Flotten-Formulare sauber. Das Block-Log zeigt Ihnen jede Entscheidung mit Begruendung.', 'wellenbrecher' ),
					'tone'  => 'success',
				)
			);
			return;
		}

		echo '<div class="hs-wb-setup" style="display:flex;gap:16px;align-items:flex-start;background:#fff;border:1px solid #dcdcde;border-left:4px solid #2271b1;border-radius:4px;padding:16px;margin:16px 0;">';

		$hans = Core::instance()->hans();
		if ( $hans->is_enabled() ) {
			$image = $hans->image_url( 30 );
			if ( '' !== $image ) {
				echo '<img src="' . esc_url( $image ) . '" alt="" width="64" height="64" loading="lazy" style="flex:0 0 auto;" />';
			}
		}

		echo '<div style="flex:1 1 auto;">';
		echo '<p style="margin:0 0 4px;font-weight:600;">' . esc_html__( 'Klar zum Auslaufen', 'wellenbrecher' ) . '</p>';
		printf(
			'<p style="margin:0 0 8px;color:#50575e;">%s</p>',
			esc_html(
				sprintf(
					/* translators: 1: erledigte Schritte, 2: Gesamtschritte */
					__( '%1$d von %2$d Schritten erledigt', 'wellenbrecher' ),
					$done,
					count( $steps )
				)
			)
		);

		echo '<ul style="margin:0;list-style:none;padding:0;">';
		foreach ( $steps as $step ) {
			echo '<li style="margin:4px 0;">';
			echo '<span aria-hidden="true" style="display:inline-block;width:1.4em;">' . ( $step['done'] ? '&#10003;' : '&#9675;' ) . '</span>';
			if ( ! $step['done'] && '' !== $step['url'] ) {
				echo '<a href="' . esc_url( $step['url'] ) . '">' . esc_html( $step['label'] ) . '</a>';
			} else {
				echo '<span>' . esc_html( $step['label'] ) . '</span>';
			}
			echo '<span class="screen-reader-text">' . ( $step['done'] ? esc_html__( '(erledigt)', 'wellenbrecher' ) : esc_html__( '(offen)', 'wellenbrecher' ) ) . '</span>';
			if ( '' !== $step['hint'] ) {
				echo ' <span style="color:#787c82;">' . esc_html( $step['hint'] ) . '</span>';
			}
			echo '</li>';
		}
		echo '</ul>';

		echo '</div>'; // Body.
		echo '</div>'; // .hs-wb-setup.
	}

	/**
	 * Berechnet die vier Onboarding-Schritte samt Erledigt-Status.
	 *
	 * @return array<int, array{label:string,done:bool,url:string,hint:string}>
	 */
	private function steps(): array {
		$activated = (int) get_option( ObservationMode::ACTIVATED_OPTION, 0 ) > 0;
		$armed     = ! $this->observation->is_active();

		return array(
			array(
				'label' => __( 'Beobachtungsmodus laeuft', 'wellenbrecher' ),
				'done'  => $activated,
				'url'   => '',
				'hint'  => '',
			),
			array(
				'label' => __( 'Scharf schalten', 'wellenbrecher' ),
				'done'  => $armed,
				'url'   => admin_url( 'admin.php?page=' . SettingsPage::SLUG ),
				'hint'  => $armed ? '' : __( 'nach Sichtung des Block-Logs', 'wellenbrecher' ),
			),
			array(
				'label' => __( 'Flotten-Kanaele erkannt', 'wellenbrecher' ),
				'done'  => true,
				'url'   => '',
				'hint'  => $this->fleet_hint(),
			),
			array(
				'label' => __( 'Datenschutz-Hinweis einbinden', 'wellenbrecher' ),
				'done'  => $this->has_privacy_policy(),
				'url'   => admin_url( 'options-privacy.php' ),
				'hint'  => __( 'Textbaustein im WordPress-Datenschutz-Assistenten', 'wellenbrecher' ),
			),
		);
	}

	/**
	 * Informativer Hinweis, welche Flotten-/Shop-Kanaele erkannt wurden.
	 *
	 * @return string
	 */
	private function fleet_hint(): string {
		$active = array();
		if ( defined( 'LEADLOTSE_VERSION' ) || class_exists( '\\Hafenstudios\\Leadlotse\\Plugin' ) ) {
			$active[] = 'Leadlotse';
		}
		if ( class_exists( 'WooCommerce' ) ) {
			$active[] = 'WooCommerce';
		}
		if ( array() === $active ) {
			return __( 'kein weiterer Kanal aktiv (Kommentare/Registrierungen sind immer geschuetzt)', 'wellenbrecher' );
		}
		return implode( ', ', $active );
	}

	/**
	 * Ist eine Datenschutzseite konfiguriert? (WordPress-Datenschutz-Assistent.)
	 *
	 * @return bool
	 */
	private function has_privacy_policy(): bool {
		return (int) get_option( 'wp_page_for_privacy_policy', 0 ) > 0;
	}
}
