<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class CCGAL_Plugin {

	private static $instance = null;

	public static function instance() {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	private function __construct() {
		// Text-Overrides müssen VOR allen Klassen initialisiert werden, die __() im
		// Konstruktor/Init aufrufen — sonst greift der gettext-Filter zu spät.
		CCGAL_Text_Overrides::init();

		CCGAL_Storage::init();
		CCGAL_CPT::init();
		CCGAL_Cache::init();
		CCGAL_Favorites::init();
		CCGAL_Gallery_Renderer::init();
		CCGAL_REST_API::init();
		CCGAL_Downloads::init();

		// Pro init: only fire if the Pro classes were actually loaded. The
		// `__premium_only` files are physically absent from the Free build, and
		// wp-galerie.php's require-loop is wrapped in a file_exists() guard for
		// the "Pro license but Free build on disk" edge case. The class_exists()
		// checks below mirror that guard.
		if ( ccgal_is_pro() ) {
			if ( class_exists( 'CCGAL_Tracking' ) )   { CCGAL_Tracking::init(); }
			if ( class_exists( 'CCGAL_Print_REST' ) ) { CCGAL_Print_REST::init(); }
			if ( class_exists( 'CCGAL_Print_Page' ) ) { CCGAL_Print_Page::init(); }
		}

		CCGAL_Privacy::init();

		if ( is_admin() ) {
			CCGAL_Admin::init();
			CCGAL_Welcome::init();

			if ( ccgal_is_pro() ) {
				if ( class_exists( 'CCGAL_Dashboard' ) )      { CCGAL_Dashboard::init(); }
				if ( class_exists( 'CCGAL_Print_Settings' ) ) { CCGAL_Print_Settings::init(); }
				if ( class_exists( 'CCGAL_Orders' ) )         { CCGAL_Orders::init(); }
			}
		}

		add_action( 'init', array( $this, 'load_textdomain' ), 1 );
		add_action( 'init', array( $this, 'maybe_upgrade_db' ) );
	}

	/**
	 * Lädt die mitgelieferte Übersetzung aus /languages.
	 *
	 * wp.org-Language-Packs greifen erst, wenn translate.wordpress.org eine
	 * freigegebene Übersetzung hat (für ein frisch gelauntes Plugin: keine),
	 * und der Freemius-Pro-Build bekommt nie wp.org-Packs. Ohne diesen Aufruf
	 * lädt die gebundelte de_DE-.mo auf keiner Installation. Liegt später ein
	 * Language-Pack in WP_LANG_DIR/plugins/ vor, hat es automatisch Vorrang.
	 * Hook `init` (Priorität 1): früh genug für alle UI-Strings, spät genug
	 * für WP 6.7+ (kein "translation loading too early"-Notice).
	 */
	public function load_textdomain() {
		// phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Required for the bundled translation (no wp.org language pack exists yet) and for Freemius-served Pro builds, which never receive wp.org language packs.
		load_plugin_textdomain( 'customer-cloud-gallery', false, dirname( CCGAL_BASENAME ) . '/languages' );
	}

	public function maybe_upgrade_db() {
		$current = get_option( 'ccgal_db_version', '0' );
		if ( version_compare( $current, CCGAL_Activator::DB_VERSION, '<' ) ) {
			CCGAL_Activator::activate();
			// Cache leeren bei Version-Bump: neue Thumb-Größen + evtl. geänderte Render-Pfade
			if ( class_exists( 'CCGAL_Cache' ) ) {
				CCGAL_Cache::clear_all();
			}
		}
	}
}
