import {
  HttpMethod,
  IStatusPattern,
  ServiceDiscoveryEndpoint,
} from '../../../index.js';

export interface SSLConfig {
  keyStoreAlias?: string;
  keyAlias?: string;
  trustStoreAlias?: string;
}

export interface INormalizedEndpoint {
  target?: ITargetEndpoint;
  suspendTimeout?: number;
  connectionTimeout?: number;
  sslConfig?: SSLConfig;
  serviceRegistryParameters?: ServiceDiscoveryEndpoint[];
}

export interface ITargetEndpoint {
  name?: string;
  tlsClientProfile?: string;
  url: string;
  urlType?: string;
  version?: string;
  timeout?: number;
  compressRequest?: string;
  decompressResponse?: boolean;
  followRedirects?: boolean;
  chunkedUpload?: boolean;
  persistentConnections?: boolean;
}

export interface INormalizedPolicy {
  input?: string;
  output?: string;
  loadBalancingAlgorithm: 'roundRobinHttp' | 'weightedRandomHttp';
  verb?: HttpMethod;
  statusException?: IStatusPattern[];
  endpointConfig: INormalizedEndpoint[];
}

export type TargetEndpointRef = {
  isFormValid: () => boolean;
};
