page_controller = $page_controller ?? new Admin_Page_Controller(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { accessibility_audio_tts_debug_log( 'AAT: Admin_Page_Controller created successfully.' ); } accessibility_audio_tts_debug_log( 'Creating Admin_AJAX_Controller...' ); $this->ajax_controller = $ajax_controller ?? new Admin_AJAX_Controller(); accessibility_audio_tts_debug_log( 'Admin_AJAX_Controller created successfully.' ); accessibility_audio_tts_debug_log( 'Creating Admin_Data_Controller...' ); $this->data_controller = $data_controller ?? new Admin_Data_Controller(); accessibility_audio_tts_debug_log( 'Admin_Data_Controller created successfully.' ); accessibility_audio_tts_debug_log( 'Creating Admin_Background_Controller...' ); $this->background_controller = $background_controller ?? new Admin_Background_Controller(); accessibility_audio_tts_debug_log( 'Admin_Background_Controller created successfully.' ); accessibility_audio_tts_debug_log( 'Creating Admin_Delete_Handler...' ); $this->delete_handler = $delete_handler ?? new Admin_Delete_Handler(); accessibility_audio_tts_debug_log( 'Admin_Delete_Handler created successfully.' ); } catch ( \Exception $e ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { accessibility_audio_tts_debug_log( 'AAT: Error in Admin_Secure constructor: ' . $e->getMessage() . '.' ); accessibility_audio_tts_debug_log( 'AAT: Stack trace: ' . $e->getTraceAsString() . '.' ); } throw $e; } // Initialize AJAX coordinator (handles CORS and routing). $this->ajax_coordinator = new Admin_AJAX_Coordinator(); // Register admin menu immediately (before admin_menu hook). add_action( 'admin_menu', array( $this->page_controller, 'add_admin_menu' ) ); // Initialize hooks and background processing. $this->init_hooks(); } /** * Initialize WordPress hooks - delegates to specialized controllers. * * @return void */ private function init_hooks() { // Page and menu management - delegate to Page Controller. add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) ); // Delete operations - only prefixed. add_action( 'wp_ajax_accessibility_audio_tts_delete_audio', array( $this->delete_handler, 'handle_delete_audio' ) ); // Data operations - delegate to Data Controller (prefixed only). add_action( 'wp_ajax_accessibility_audio_tts_export_cost_data', array( $this->data_controller, 'export_cost_data' ) ); add_action( 'wp_ajax_accessibility_audio_tts_import_cost_data', array( $this->data_controller, 'import_cost_data' ) ); // Background processing - delegate to Background Controller. add_action( 'accessibility_audio_tts_process_background_posts', array( $this->background_controller, 'process_background_posts' ) ); add_action( 'accessibility_audio_tts_execute_auto_trigger', array( $this->background_controller, 'execute_auto_trigger' ) ); add_action( 'accessibility_audio_tts_auto_schedule_post_conversion', array( $this->background_controller, 'auto_schedule_post_conversion' ) ); add_action( 'accessibility_audio_tts_process_queue', array( $this->background_controller, 'process_auto_queue' ) ); } // Removed deprecated handle_admin_post_requests() method as part of dead code cleanup. /** * Render admin page - delegates to Page Controller. * * @return void */ public function render_admin_page() { $this->page_controller->render_admin_page(); } /** * Enqueue admin assets. * * @param string $hook Current admin page hook. * @return void */ public function enqueue_admin_assets( $hook ) { if ( ! $this->page_controller->is_accessibility_audio_tts_admin_page() ) { return; } // Use Asset Manager for proper asset loading. $asset_manager = new Asset_Manager(); $asset_manager->enqueue_admin_assets( $hook ); } /** * Get controller instances for external access if needed. * * @return Admin_Page_Controller Page controller. */ public function get_page_controller() { return $this->page_controller; } /** * Get AJAX controller. * * @return Admin_AJAX_Controller AJAX controller. */ public function get_ajax_controller() { return $this->ajax_controller; } /** * Get Data controller. * * @return Admin_Data_Controller Data controller. */ public function get_data_controller() { return $this->data_controller; } /** * Get Background controller. * * @return Admin_Background_Controller Background controller. */ public function get_background_controller() { return $this->background_controller; } /** * Get admin status summary from all controllers. * * @return array Combined status from all controllers. */ public function get_admin_status() { return array( 'page_info' => array( 'admin_url' => $this->page_controller->get_admin_page_url(), 'is_admin_page' => $this->page_controller->is_accessibility_audio_tts_admin_page(), ), 'background_status' => $this->background_controller->get_background_status(), 'background_stats' => $this->background_controller->get_background_statistics(), 'cost_stats' => $this->data_controller->get_cost_statistics(), ); } }