<?php
/**
 * Plugin Name:       Kurato
 * Plugin URI:        https://hafenstudios.com/kurato
 * Description:       Marketing-CRM fuer WordPress. Kuemmert sich, bis aus dem Lead ein Kunde wird. Kontakte, Pipeline, Newsletter. DSGVO-first.
 * Version:           1.3.1
 * Update URI:        https://hafenstudios.com/updates/kurato
 * 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:       kurato
 * Domain Path:       /languages
 *
 * @package Hafenstudios\Kurato
 */

defined( 'ABSPATH' ) || exit;

define( 'KURATO_VERSION', '1.3.1' );
define( 'KURATO_FILE', __FILE__ );
define( 'KURATO_DIR', plugin_dir_path( __FILE__ ) );
define( 'KURATO_URL', plugin_dir_url( __FILE__ ) );
define( 'KURATO_MIN_PHP', '8.1' );

/**
 * PHP-Version pruefen, sonst mit klarer Meldung (Ursache + naechster Schritt) stoppen.
 */
if ( version_compare( PHP_VERSION, KURATO_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__( 'Kurato benoetigt PHP %1$s oder neuer. Ihre Version ist %2$s. Bitte aktualisieren Sie PHP im Hosting-Panel oder fragen Sie Ihren Anbieter.', 'kurato' ),
				esc_html( KURATO_MIN_PHP ),
				esc_html( PHP_VERSION )
			);
			echo '</p></div>';
		}
	);
	return;
}

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

use Hafenstudios\Kurato\Install\Installer;
use Hafenstudios\Kurato\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 Core\Licensing\ProGate freigeschaltet. Kein zweites
 * Premium-ZIP, kein Code-Stripping. Darum is_premium/has_premium_version = false
 * und has_paid_plans = true; so bleibt auch der Freemius-Updater inaktiv und
 * greift dem Eigenvertrieb (Manifest auf hafenstudios.com) nicht ins Steuer.
 *
 * anonymous_mode: kein Opt-in-Dialog, keine Nutzungsdaten. Ohne Lizenzeingabe
 * verlaesst kein Byte die Site. Die Cockpit-Seats werden separat abgerechnet
 * (eigenes Freemius-Produkt, Webhook im Cockpit-Dienst).
 *
 * Solange KURATO_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( 'KURATO_FS_ID', '35576' );
define( 'KURATO_FS_PUBLIC_KEY', 'pk_cfeeb028d7c0d41326c2279a1683d' );

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

		if ( ! isset( $kurato_fs ) ) {
			$kurato_sdk = KURATO_DIR . 'vendor/freemius/start.php';

			if ( '' === KURATO_FS_ID || ! is_readable( $kurato_sdk ) ) {
				return null;
			}

			require_once $kurato_sdk;

			$kurato_fs = fs_dynamic_init(
				array(
					'id'                  => KURATO_FS_ID,
					'slug'                => 'kurato',
					'type'                => 'plugin',
					'public_key'          => KURATO_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'    => 'kurato',
						'account' => true,
						'contact' => false,
						'support' => false,
					),
				)
			);

			do_action( 'kurato_fs_loaded' );
		}

		return $kurato_fs;
	}

	kurato_fs();
}

/**
 * Lizenz an die Pro-Weiche haengen (Core\Licensing\ProGate::enabled( 'kurato' )).
 */
add_filter(
	'hafenstudios/kurato_pro',
	static function ( $pro ) {
		$fs = function_exists( 'kurato_fs' ) ? kurato_fs() : null;

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

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

register_activation_hook(
	__FILE__,
	static function () {
		Installer::activate();
	}
);

register_deactivation_hook(
	__FILE__,
	static function () {
		Installer::deactivate();
	}
);

/**
 * Plugin starten, sobald der Core geladen ist.
 */
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( 'Kurato konnte die Hafenstudios-Core-Bibliothek nicht laden. Bitte installieren Sie das Plugin neu.', 'kurato' );
					echo '</p></div>';
				}
			);
			return;
		}
		Plugin::instance()->boot();
	},
	20
);
