'Version', ], false ); $groq_ai_version = isset( $groq_ai_plugin_data['Version'] ) && $groq_ai_plugin_data['Version'] ? $groq_ai_plugin_data['Version'] : '1.0.0'; define( 'GROQ_AI_PRODUCT_TEXT_VERSION', $groq_ai_version ); } if ( ! defined( 'GROQ_AI_DEBUG_TRACE_ADDED' ) && defined( 'WP_DEBUG' ) && WP_DEBUG ) { define( 'GROQ_AI_DEBUG_TRACE_ADDED', true ); } require_once __DIR__ . '/includes/Core/class-groq-ai-service-container.php'; require_once __DIR__ . '/includes/Core/class-groq-ai-model-exclusions.php'; require_once __DIR__ . '/includes/Core/class-groq-ai-ajax-controller.php'; require_once __DIR__ . '/includes/Contracts/interface-groq-ai-provider.php'; require_once __DIR__ . '/includes/Providers/class-groq-ai-abstract-openai-provider.php'; require_once __DIR__ . '/includes/Providers/class-groq-ai-provider-groq.php'; require_once __DIR__ . '/includes/Providers/class-groq-ai-provider-openai.php'; require_once __DIR__ . '/includes/Providers/class-groq-ai-provider-google.php'; require_once __DIR__ . '/includes/Providers/class-groq-ai-provider-manager.php'; require_once __DIR__ . '/includes/Services/Settings/class-groq-ai-settings-manager.php'; require_once __DIR__ . '/includes/Services/Prompt/class-groq-ai-prompt-builder.php'; require_once __DIR__ . '/includes/Services/Conversations/class-groq-ai-conversation-manager.php'; require_once __DIR__ . '/includes/Services/Logging/class-groq-ai-generation-logger.php'; require_once __DIR__ . '/includes/Admin/class-groq-ai-settings-page.php'; require_once __DIR__ . '/includes/Admin/class-groq-ai-logs-table.php'; require_once __DIR__ . '/includes/Admin/class-groq-ai-product-ui.php'; if( ! class_exists( 'SitiWebUpdater' ) ){ include_once( plugin_dir_path( __FILE__ ) . 'SitiWebUpdater.php' ); } $updater = new SitiWebUpdater( __FILE__ ); $updater->set_username( 'SitiWeb' ); $updater->set_repository( 'siti-ai-product-content-generator' ); $updater->initialize(); final class Groq_AI_Product_Text_Plugin { const OPTION_KEY = 'groq_ai_product_text_settings'; const CONVERSATION_OPTION_KEY = 'groq_ai_product_text_conversations'; const MODELS_CACHE_OPTION_KEY = 'groq_ai_product_text_models'; private static $instance = null; /** @var Groq_AI_Service_Container */ private $container; /** @var */ private $settings_page; /** @var Groq_AI_Product_Text_Product_UI */ private $product_ui; /** @var bool */ private $missing_wc_notice = false; public static function instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } private function __construct() { $this->register_services(); $this->settings_page = new Groq_AI_Product_Text_Settings_Page( $this, $this->get_provider_manager() ); $this->product_ui = new Groq_AI_Product_Text_Product_UI( $this ); add_action( 'plugins_loaded', [ $this, 'maybe_create_logs_table' ] ); add_action( 'load-plugins.php', [ $this, 'maybe_deactivate_if_woocommerce_missing' ] ); } private function register_services() { $this->container = new Groq_AI_Service_Container(); $this->container->set( 'provider_manager', function () { return new Groq_AI_Provider_Manager(); } ); $this->container->set( 'settings_manager', function ( Groq_AI_Service_Container $container ) { return new Groq_AI_Settings_Manager( self::OPTION_KEY, $container->get( 'provider_manager' ) ); } ); $this->container->set( 'prompt_builder', function ( Groq_AI_Service_Container $container ) { return new Groq_AI_Prompt_Builder( $container->get( 'settings_manager' ) ); } ); $this->container->set( 'conversation_manager', function () { return new Groq_AI_Conversation_Manager( self::CONVERSATION_OPTION_KEY ); } ); $this->container->set( 'generation_logger', function () { return new Groq_AI_Generation_Logger(); } ); $this->container->set( 'ajax_controller', function () { return new Groq_AI_Ajax_Controller( $this ); } ); // Instantiate controller immediately so hooks are registered. $this->container->get( 'ajax_controller' ); } public function get_option_key() { return self::OPTION_KEY; } public function get_provider_manager() { return $this->container->get( 'provider_manager' ); } public function get_settings_manager() { return $this->container->get( 'settings_manager' ); } public function get_prompt_builder() { return $this->container->get( 'prompt_builder' ); } public function get_conversation_manager() { return $this->container->get( 'conversation_manager' ); } public function get_generation_logger() { return $this->container->get( 'generation_logger' ); } public function get_settings() { return $this->get_settings_manager()->all(); } public function sanitize_settings( $input ) { return $this->get_settings_manager()->sanitize( $input ); } public function maybe_deactivate_if_woocommerce_missing() { if ( $this->is_woocommerce_active() ) { return; } if ( ! function_exists( 'deactivate_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } deactivate_plugins( plugin_basename( GROQ_AI_PRODUCT_TEXT_FILE ) ); $this->missing_wc_notice = true; add_action( 'admin_notices', [ $this, 'render_missing_wc_notice' ] ); } public function render_missing_wc_notice() { if ( ! $this->missing_wc_notice ) { return; } ?>