/// Health check endpoint for API connectivity testing
library;

import '../client.dart';
import '../types.dart';

// =============================================================================
// Health Endpoint
// =============================================================================

/// Extension on CqrsApiClient for health check operations
extension HealthEndpoint on CqrsApiClient {
  /// Check if the API is healthy and responding
  ///
  /// Returns a `Result<bool>` where:
  /// - Success: true if API is healthy
  /// - Error: ApiError with details about the failure
  ///
  /// Example:
  /// ```dart
  /// final client = CqrsApiClient(config: ApiClientConfig.development);
  /// final result = await client.checkHealth();
  ///
  /// result.when(
  ///   success: (isHealthy) => print('API is healthy: $isHealthy'),
  ///   error: (error) => print('Health check failed: ${error.message}'),
  /// );
  /// ```
  Future<Result<bool>> checkHealth() async {
    return executeQuery<bool>(
      endpoint: 'health',
      query: const HealthQuery(),
      fromJson: (json) => json as bool,
    );
  }
}

/// Standalone health check function for convenience
///
/// Creates a temporary client instance to perform the health check.
/// Use this when you don't have a client instance readily available.
///
/// Example:
/// ```dart
/// final result = await performHealthCheck();
/// if (result.isSuccess && result.value) {
///   print('API is ready!');
/// }
/// ```
Future<Result<bool>> performHealthCheck({
  ApiClientConfig config = ApiClientConfig.development,
}) async {
  final client = CqrsApiClient(config: config);
  try {
    return await client.checkHealth();
  } finally {
    client.dispose();
  }
}
