load_dependencies(); $this->init_components(); $this->register_hooks(); } /** * Load required files */ private function load_dependencies() { require_once plugin_dir_path( __FILE__ ) . 'class-settings-pages.php'; require_once plugin_dir_path( __FILE__ ) . 'class-setup-wizard.php'; } /** * Initialize components */ private function init_components() { $this->settings_pages = new AI_Search_Settings_Pages(); $this->setup_wizard = new AI_Search_Setup_Wizard(); } /** * Register admin hooks */ private function register_hooks() { add_action( 'admin_menu', [ $this, 'register_settings_menu' ] ); add_action( 'admin_notices', [ $this->setup_wizard, 'show_setup_notice' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] ); add_action( 'admin_enqueue_scripts', [ $this->setup_wizard, 'enqueue_scripts' ] ); add_action( 'admin_head', [ $this, 'add_menu_icon_styles' ] ); // Admin post actions add_action( 'admin_post_ai_search_generate_embeddings', [ $this->settings_pages, 'generate_selected_embeddings' ] ); add_action( 'admin_post_ai_search_clear_cache', [ $this->settings_pages, 'clear_embeddings_cache' ] ); add_action( 'admin_post_ai_search_validate_token', [ $this->settings_pages, 'validate_service_token' ] ); add_action( 'admin_post_ai_search_save_custom_fields', [ $this->settings_pages, 'save_custom_fields_settings' ] ); add_action( 'admin_post_ai_search_save_woocommerce_fields', [ $this->settings_pages, 'save_woocommerce_fields_settings' ] ); add_action( 'admin_post_ai_search_complete_setup', [ $this->setup_wizard, 'complete_setup' ] ); // AJAX actions add_action( 'wp_ajax_ai_search_validate_token', [ $this->settings_pages, 'validate_service_token' ] ); } /** * Enqueue admin CSS and JS */ public function enqueue_admin_assets( $hook ) { // Only load on our settings page (now it's a top-level menu) if ( 'toplevel_page_ai-search' !== $hook ) { return; } wp_enqueue_style( 'ai-search-admin-settings', plugins_url( 'css/admin-settings.css', __FILE__ ), [], AI_SEARCH_VERSION ); } /** * Register settings menu in admin */ public function register_settings_menu() { add_menu_page( 'AI Search', // Page title 'AI Search', // Menu title 'manage_options', // Capability 'ai-search', // Menu slug [ $this->settings_pages, 'display_settings_page' ], // Callback AI_SEARCH_URL . 'assets/icon.svg', // Icon 58 // Position (before Settings) ); } /** * Get settings pages instance */ public function get_settings_pages() { return $this->settings_pages; } /** * Get setup wizard instance */ public function get_setup_wizard() { return $this->setup_wizard; } /** * Add custom CSS for menu icon sizing */ public function add_menu_icon_styles() { ?>