<?php
/**
 * Premium özellik yöneticisi - Ana sınıf
 * WordPress.org guidelines'ına uygun
 * Premium klasörü ile çalışır
 */

namespace AIPT\Utils;

defined('ABSPATH') || exit;

/**
 * Premium özellik yönetimi için ana sınıf
 * Free sürümde temel UI kontrolü, Premium sürümde tam fonksiyonalite
 */
class PremiumFeatureManager {
    
    private static $premium_loaded = false;
    
    /**
     * Constructor
     */
    public function __construct() {
        $this->loadPremiumModule();
    }

    /**
     * Premium modülü yükler ve hook'ları başlatır (sadece premium sürümde mevcut)
     */
    private function loadPremiumModule() {
        $premium_file = AIPT_PLUGIN_DIR . 'src/Premium/PremiumFeatureManager.php';

        if ( file_exists( $premium_file ) && ! self::$premium_loaded ) {
            require_once $premium_file;
            self::$premium_loaded = class_exists( 'AIPT\Premium\PremiumFeatureManager' );

            if ( self::$premium_loaded ) {
                \AIPT\Premium\PremiumFeatureManager::initHooks();
            }
        }
    }
    
    /**
     * Premium sınıfı yüklenmiş mi?
     */
    private function isPremiumLoaded(): bool {
        return self::$premium_loaded;
    }
    
    /**
     * Premium özellikleri kullanabilir mi?
     */
    public function canUsePremiumFeatures(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUsePremiumFeatures();
        }
        

        return false;
    }
    
    /**
     * Pro özelliklerini kullanabilir mi?
     */
    public function canUseProFeatures(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseProFeatures();
        }
        
        return false;
    }
    
    /**
     * Business özelliklerini kullanabilir mi?
     */
    public function canUseBusinessFeatures(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseBusinessFeatures();
        }
        
        return false;
    }
    
    /**
     * Mevcut planı getirir
     */
    public function getCurrentPlan(): string {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::getCurrentPlan();
        }
        
        return 'free';
    }
    
    /**
     * JavaScript için veri hazırlar
     */
    public function prepareDataForJS(): array {

        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::preparePremiumDataForJS();
        }
        

		return [
		    'is_premium' => false,
		    'plan' => 'free',
		    'pluginId' => null,
		    'upgradeUrl' => $this->getUpgradeUrl(),
		    'features' => [
		        'advancedTitleOptions' => false,
		        'customPrompts' => false,
		        'communityPrompts' => false,
		        'improvePrompt' => false,
		        'additionalTitlePrompts' => false,
		        'additionalFaqPrompts' => false,
		        'additionalSeoMetaPrompts' => false,
		        'advancedFaqOptions' => false,
		        'bulkOperations' => false,
		        'exampleDescriptions' => false,
		        'seoMetaHistory' => false,
		        'seoMetaVariants' => false,
		        'seoMetaCsv' => false,
		        'advancedAnalytics' => false,
		        'whiteLabel' => false,
		        'taxonomyAdditionalPrompt' => false,
		        'promptAutoFill' => false,
		    ]
		];
    }
    
    /**
     * Upgrade URL'ini getirir
     */
    private function getUpgradeUrl(): string {

        if (function_exists('aipt_fs')) {
            $fs = aipt_fs();
            if (method_exists($fs, 'get_upgrade_url')) {
                return $fs->get_upgrade_url();
            }
        }
        

        return 'https://aiforwoo.com/pricing';
    }
    
    /**
     * aiptData'yı premium bilgileriyle genişletir
     */
    public function extendAiptData(array $data): array {

        if (isset($data['fs'])) {

            if (!isset($data['fs']['features'])) {
                $premiumData = $this->prepareDataForJS();
                $data['fs']['features'] = $premiumData['features'];
            }
        } else {

            $data['fs'] = $this->prepareDataForJS();
        }
        return $data;
    }
    
    /**
     * WordPress admin'e premium scripti ekler
     */
    public function enqueue_premium_scripts() {
        wp_add_inline_script('aipt-admin', '
            window.aiptPremiumStatus = ' . wp_json_encode($this->prepareDataForJS()) . ';
        ');
    }
    
    /**
     * Premium özellik durumunu kontrol eder
     */
    public function checkFeatureAccess(string $feature): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::checkFeatureAccess($feature);
        }
        
        return false;
    }
    
    /**
     * Özellik için UI kilit sınıfını getirir (Her zaman çalışır - UI için)
     */
    public function getPremiumLockClass(string $feature): string {
        if ($this->checkFeatureAccess($feature)) {
            return '';
        }
        return 'aipt-premium-locked';
    }
    
    /**
     * API endpoint'leri için premium kontrol
     */
    public function validatePremiumAPIAccess(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::validatePremiumAPIAccess();
        }
        
        return false;
    }
    
    /**
     * Premium başlık üretimi kontrol eder
     */
    public function canUseAdvancedTitleGeneration(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseAdvancedTitleGeneration();
        }
        
        return false;
    }
    
    /**
     * Premium içerik üretimi kontrol eder
     */
    public function canUseAdvancedContentGeneration(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseAdvancedContentGeneration();
        }
        
        return false;
    }
    
    /**
     * Premium analytics erişimi
     */
    public function canUseAdvancedAnalytics(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseAdvancedAnalytics();
        }
        
        return false;
    }
    
    /**
     * White label erişimi
     */
    public function canUseWhiteLabel(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseWhiteLabel();
        }
        
        return false;
    }
    
    /**
     * Additional title prompts erişimi
     */
    public function canUseAdditionalTitlePrompts(): bool {
        if ($this->isPremiumLoaded()) {
            return \AIPT\Premium\PremiumFeatureManager::canUseAdditionalTitlePrompts();
        }
        
        return false;
    }
    
    /**
     * Singleton instance getirir
     */
    public static function getInstance(): self {
        if ( null !== self::$test_instance ) {
            return self::$test_instance;
        }
        static $instance = null;
        if ($instance === null) {
            $instance = new self();
        }
        return $instance;
    }

    /**
     * Override the singleton for test environments only.
     *
     * @internal PHPUnit use only — never call in production code.
     * @param self|null $instance Replacement instance, or null to reset.
     */
    public static function setInstanceForTesting( ?self $instance ): void {
        self::$test_instance = $instance;
    }

    /**
     * Test-only override slot. Always null in production.
     *
     * @internal
     * @var self|null
     */
    private static $test_instance = null;
} 
