' . esc_html__( 'Connection successful!', 'ai-search' ) . ' ' . esc_html__( 'AI Search Service is working correctly.', 'ai-search' ) . '

'; if ( isset( $validation_data['client'] ) ) { $client = $validation_data['client']; $used_total = intval( $client['used_total'] ?? 0 ); $total_limit = intval( $client['total_limit'] ?? 10000 ); $remaining = $total_limit - $used_total; echo '

' . sprintf( esc_html__( 'Embeddings used: %1$s / %2$s (%3$s remaining)', 'ai-search' ), '' . esc_html( number_format( $used_total ) ) . '', esc_html( number_format( $total_limit ) ), esc_html( number_format( $remaining ) ) ) . '

'; } echo ''; delete_transient( 'ai_search_validation_data' ); } } elseif ( $validation_status === 'invalid' ) { $error_data = get_transient( 'ai_search_validation_error' ); echo '

' . esc_html__( 'Connection failed!', 'ai-search' ) . '

'; if ( $error_data && isset( $error_data['details'] ) ) { echo '

' . esc_html( $error_data['details'] ) . '

'; } echo '
'; delete_transient( 'ai_search_validation_error' ); } elseif ( $validation_status === 'error' ) { echo '

' . esc_html__( 'Connection failed!', 'ai-search' ) . ' ' . esc_html__( 'Unable to reach AI Search Service. Please try again later.', 'ai-search' ) . '

'; } elseif ( $validation_status === 'no_token' ) { echo '

' . esc_html__( 'Not registered.', 'ai-search' ) . ' ' . esc_html__( 'Please save your settings to register with the AI Search Service.', 'ai-search' ) . '

'; } } // Handle form submission if ( isset( $_POST['provider'], $_POST['api_key'], $_POST['similarity_threshold'] ) ) { check_admin_referer( 'ai_search_save_settings' ); $new_provider = sanitize_text_field( $_POST['provider'] ); $current_provider = get_option( 'ai_search_provider', '' ); // Save the basic settings update_option( 'ai_search_provider', $new_provider ); update_option( 'ai_search_api_key', sanitize_text_field( wp_unslash( $_POST['api_key'] ) ) ); update_option( 'ai_search_similarity_threshold', floatval( $_POST['similarity_threshold'] ) ); // Save badge public visibility option update_option( 'ai_search_badge_public', isset( $_POST['badge_public'] ) && $_POST['badge_public'] === '1' ); // Handle AI service registration $service_client = new AI_Search_Service(); if ( $new_provider === 'ai_service' && empty( get_option( 'ai_search_service_token', '' ) ) ) { $service_token = $service_client->register_origin(); if ( $service_token ) { update_option( 'ai_search_service_token', $service_token ); echo '

' . esc_html__( 'Settings saved successfully! AI Search Service registered.', 'ai-search' ) . '

'; } else { update_option( 'ai_search_provider', $current_provider ); echo '

' . esc_html__( 'AI Search Service is temporarily unavailable.', 'ai-search' ) . ' ' . esc_html__( 'Please try again later or use your own OpenAI API key instead.', 'ai-search' ) . '

'; } } else { echo '

' . esc_html__( 'Settings saved successfully!', 'ai-search' ) . '

'; } } ?>








<?php esc_attr_e( 'AI Search', 'ai-search' ); ?>

%



<?php esc_attr_e( 'AI Search', 'ai-search' ); ?>