/**
 * Types for the resilience framework
 */

// Export marine constants
export * from './marine-constants';

// Import types from sailboat-types
import { common } from '@sailboat-computer/sailboat-types';

// Re-export types
export type HealthStatusType = common.HealthStatus;
export type OperationalContextType = common.OperationalContext;
export type MarineFailureTypeType = common.MarineFailureType;
export type CircuitBreakerStateType = common.CircuitBreakerState;
export type MarineSystemTypeType = common.MarineSystemType;

/**
 * Circuit breaker configuration
 */
export interface CircuitBreakerConfig {
  // Basic configuration
  failureThreshold: number;
  successThreshold: number;
  timeout: number;
  
  // Marine-specific configuration
  operationalContext: OperationalContextType;
  failureTypes: MarineFailureTypeType[];
  environmentalAdjustments: {
    roughSeas: boolean;
    lowPower: boolean;
    limitedConnectivity: boolean;
  };
  
  // Advanced configuration
  volumeThreshold: number;
  errorPercentageThreshold: number;
  slowCallDurationThreshold: number;
  slowCallRateThreshold: number;
}

/**
 * Retry configuration
 */
export interface RetryConfig {
  // Basic configuration
  maxAttempts: number;
  initialDelayMs: number;
  maxDelayMs: number;
  
  // Backoff strategy
  backoffStrategy: 'linear' | 'exponential' | 'fibonacci' | 'random';
  backoffFactor: number;
  
  // Marine-specific configuration
  operationalContext: OperationalContextType;
  failureTypes: MarineFailureTypeType[];
  environmentalAdjustments: {
    roughSeas: boolean;
    lowPower: boolean;
    limitedConnectivity: boolean;
  };
}

/**
 * Timeout configuration
 */
export interface TimeoutConfig {
  // Basic configuration
  timeoutMs: number;
  
  // Marine-specific configuration
  operationalContext: OperationalContextType;
  environmentalAdjustments: {
    roughSeas: boolean;
    lowPower: boolean;
    limitedConnectivity: boolean;
  };
  
  // Advanced configuration
  cancelOnTimeout: boolean;
  timeoutStrategy: 'fixed' | 'adaptive';
}

/**
 * Bulkhead configuration
 */
export interface BulkheadConfig {
  // Basic configuration
  maxConcurrent: number;
  maxQueueSize: number;
  
  // Marine-specific configuration
  operationalContext: OperationalContextType;
  environmentalAdjustments: {
    roughSeas: boolean;
    lowPower: boolean;
    limitedConnectivity: boolean;
  };
  
  // Advanced configuration
  fairQueue: boolean;
  queueTimeout: number;
}

/**
 * Degradation configuration
 */
export interface DegradationConfig {
  // Basic configuration
  degradationLevels: {
    level: number;
    threshold: number;
    features: string[];
  }[];
  
  // Marine-specific configuration
  operationalContext: OperationalContextType;
  environmentalAdjustments: {
    roughSeas: boolean;
    lowPower: boolean;
    limitedConnectivity: boolean;
  };
}
