handle_chat( $data ); $result = $this->normalize_response_data( $result ); $response->status = 'success'; $response->data = $result; } catch ( Throwable $e ) { $response->message = __( 'The AI Assistant is unavailable right now. Please try again later.', 'learnpress' ); $response->data = $this->normalize_response_data( array() ); } wp_send_json( $response ); } /** * Normalize controller result to required frontend contract. * * @param array $result * * @return array{type:string,message:string,quiz:array|null} */ private function normalize_response_data( array $result ): array { $type = $result['type'] ?? 'text'; if ( ! in_array( $type, array( 'text', 'quiz' ), true ) ) { $type = 'text'; } return array( 'type' => $type, 'message' => isset( $result['message'] ) ? (string) $result['message'] : '', 'quiz' => is_array( $result['quiz'] ?? null ) ? $result['quiz'] : null, ); } }