<?php
/**
 * Plugin Name:       Wellenbrecher
 * Plugin URI:        https://hafenstudios.com/wellenbrecher
 * Description:       Local-first Anti-Spam fuer Kommentare, Formulare, Registrierungen und WooCommerce. Bricht die Spamflut, bevor sie den Hafen erreicht. Ohne Cloud, ohne externe Requests.
 * Version:           1.1.1
 * Update URI:        https://hafenstudios.com/updates/wellenbrecher
 * Requires at least: 6.5
 * Requires PHP:      8.1
 * Author:            Hafenstudios
 * Author URI:        https://hafenstudios.com
 * License:           GPL-2.0-or-later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       wellenbrecher
 * Domain Path:       /languages
 *
 * @package Hafenstudios\Wellenbrecher
 */

defined( 'ABSPATH' ) || exit;

define( 'WELLENBRECHER_VERSION', '1.1.1' );
define( 'WELLENBRECHER_FILE', __FILE__ );
define( 'WELLENBRECHER_DIR', plugin_dir_path( __FILE__ ) );
define( 'WELLENBRECHER_URL', plugin_dir_url( __FILE__ ) );
define( 'WELLENBRECHER_MIN_PHP', '8.1' );

/**
 * PHP-Version pruefen, sonst mit klarer Meldung (Ursache + naechster Schritt) stoppen.
 */
if ( version_compare( PHP_VERSION, WELLENBRECHER_MIN_PHP, '<' ) ) {
	add_action(
		'admin_notices',
		static function () {
			echo '<div class="notice notice-error"><p>';
			printf(
				/* translators: 1: benoetigte PHP-Version, 2: aktuelle PHP-Version */
				esc_html__( 'Wellenbrecher benoetigt PHP %1$s oder neuer. Ihre Version ist %2$s. Bitte aktualisieren Sie PHP im Hosting-Panel oder fragen Sie Ihren Anbieter.', 'wellenbrecher' ),
				esc_html( WELLENBRECHER_MIN_PHP ),
				esc_html( PHP_VERSION )
			);
			echo '</p></div>';
		}
	);
	return;
}

/**
 * Composer-Autoloader (enthaelt via files-Autoload den Core-Bootstrap).
 */
$wellenbrecher_autoloader = WELLENBRECHER_DIR . 'vendor/autoload.php';
if ( is_readable( $wellenbrecher_autoloader ) ) {
	require_once $wellenbrecher_autoloader;
} else {
	add_action(
		'admin_notices',
		static function () {
			echo '<div class="notice notice-error"><p>';
			esc_html_e( 'Wellenbrecher ist nicht vollstaendig installiert (vendor-Ordner fehlt). Bitte laden Sie das Plugin erneut aus dem offiziellen Paket hoch oder fuehren Sie "composer install" aus.', 'wellenbrecher' );
			echo '</p></div>';
		}
	);
	return;
}

use Hafenstudios\Wellenbrecher\Install\Installer;
use Hafenstudios\Wellenbrecher\Plugin;

/**
 * Freemius-Lizenz-Layer (Muster: Adjet, Hausentscheidung 10.07.2026; Flotten-Linie
 * in FREEMIUS-LAUNCH.md).
 *
 * Die Flotte liefert EIN Paket aus: der Pro-Code steckt im selben ZIP und wird
 * zur Laufzeit ueber Support\ProGate freigeschaltet. Kein zweites Premium-ZIP,
 * kein Code-Stripping. Darum is_premium/has_premium_version = false und
 * has_paid_plans = true. Wichtige Folge: der Freemius-Updater bleibt inaktiv (das
 * SDK instanziiert ihn nur bei is_premium() plus has_release_on_freemius()), damit
 * er dem Support\SelfUpdater nicht ins Steuer greift - Updates kommen weiter aus
 * dem Manifest auf hafenstudios.com.
 *
 * anonymous_mode: kein Opt-in-Dialog, keine Nutzungsdaten. Ohne Lizenzeingabe
 * verlaesst kein Byte die Site; das ist die Datenschutz-Linie des Plugins.
 *
 * Solange WELLENBRECHER_FS_ID leer ist (Produkt im Freemius-Dashboard noch nicht
 * angelegt), wird das SDK gar nicht geladen und das Plugin verhaelt sich exakt
 * wie bisher.
 */
define( 'WELLENBRECHER_FS_ID', '35574' );
define( 'WELLENBRECHER_FS_PUBLIC_KEY', 'pk_a716af57e9ccd6c5cded83ef39ccd' );

if ( ! function_exists( 'wellenbrecher_fs' ) ) {
	/**
	 * Freemius-Instanz oder null, solange kein Produkt verdrahtet ist.
	 *
	 * @return \Freemius|null
	 */
	function wellenbrecher_fs() {
		global $wellenbrecher_fs;

		if ( ! isset( $wellenbrecher_fs ) ) {
			$wellenbrecher_sdk = WELLENBRECHER_DIR . 'vendor/freemius/start.php';

			if ( '' === WELLENBRECHER_FS_ID || ! is_readable( $wellenbrecher_sdk ) ) {
				return null;
			}

			require_once $wellenbrecher_sdk;

			$wellenbrecher_fs = fs_dynamic_init(
				array(
					'id'                  => WELLENBRECHER_FS_ID,
					'slug'                => 'wellenbrecher',
					'type'                => 'plugin',
					'public_key'          => WELLENBRECHER_FS_PUBLIC_KEY,
					'is_premium'          => false,
					'has_premium_version' => false,
					'has_addons'          => false,
					'has_paid_plans'      => true,
					'is_org_compliant'    => false,
					'anonymous_mode'      => true,
					'trial'               => array(
						'days'               => 14,
						'is_require_payment' => false,
					),
					'menu'                => array(
						'slug'    => 'wellenbrecher',
						'account' => true,
						'contact' => false,
						'support' => false,
					),
				)
			);

			do_action( 'wellenbrecher_fs_loaded' );
		}

		return $wellenbrecher_fs;
	}

	wellenbrecher_fs();
}

/**
 * Lizenz an die Pro-Weiche haengen. Ohne verdrahtetes Produkt bleibt der
 * bisherige Zustand (Konstante/Filter) unveraendert stehen.
 */
add_filter(
	'hafenstudios/wellenbrecher_pro',
	static function ( $pro ) {
		$fs = function_exists( 'wellenbrecher_fs' ) ? wellenbrecher_fs() : null;

		return $fs ? ( $pro || $fs->is_paying_or_trial() ) : $pro;
	}
);
add_filter(
	'hafenstudios/wellenbrecher_upgrade_url',
	static function ( $url ) {
		$fs = function_exists( 'wellenbrecher_fs' ) ? wellenbrecher_fs() : null;

		return $fs ? $fs->get_upgrade_url() : $url;
	}
);

/**
 * Aktivierung: Tabellen, Capabilities, Default-Einstellungen, Purge-Cron.
 */
register_activation_hook(
	__FILE__,
	static function () {
		Installer::activate();
	}
);

/**
 * Deaktivierung: geplante Aufgaben aufraeumen (Daten bleiben erhalten).
 */
register_deactivation_hook(
	__FILE__,
	static function () {
		Installer::deactivate();
	}
);

/**
 * Plugin starten, sobald der Core geladen ist. Der Core bootet auf
 * plugins_loaded (Prioritaet -50), daher haengt Wellenbrecher sich auf
 * plugins_loaded mit Prioritaet 20 und prueft den Core-Guard.
 */
add_action(
	'plugins_loaded',
	static function () {
		if ( ! class_exists( \Hafenstudios\Core\Core::class ) ) {
			add_action(
				'admin_notices',
				static function () {
					echo '<div class="notice notice-error"><p>';
					esc_html_e( 'Wellenbrecher konnte die Hafenstudios-Core-Bibliothek nicht laden. Bitte installieren Sie das Plugin neu.', 'wellenbrecher' );
					echo '</p></div>';
				}
			);
			return;
		}
		Plugin::instance()->boot();
	},
	20
);
