import { IConnectorConfig, IConnector } from '@biorate/connector';

export type IHaproxyConnection = {
  start(): Promise<boolean>;
  stop(all?: boolean): Promise<boolean>;
  softstop(): Promise<boolean>;
  reload(hard?: boolean): Promise<boolean>;
  verify(): Promise<boolean>;
  running(): Promise<boolean>;
  clear(all?: boolean): Promise<void>;
  disable(backend: string, server: string): Promise<void>;
  enable(backend: string, server: string): Promise<void>;
  pause(): Promise<void>;
  resume(frontend: string): Promise<void>;
  errors(id?: string | number): Promise<void>;
  weight(backend: string, server: string, weight?: number): Promise<void>;
  maxconn(frontend: string, max: number): Promise<void>;
  maxconn(max: number): Promise<void>;
  ratelimit(value: number): Promise<void>;
  compression(value: number): Promise<void>;
  info(): Promise<string>;
  session(id?: string | number): Promise<void>;
  stat(...args: string[]): Promise<Record<string, string>[]>;
};

export interface IHaproxyConfig extends IConnectorConfig {
  config: {
    [key: string]:
      | {
          [key: string]: string | number;
        }
      | string[];
  };
  readiness?: {
    nodes?: string;
    retries?: number;
    delay?: number;
  };
  debug?: boolean;
}

export type IHaproxyConnector = IConnector<IHaproxyConfig, IHaproxyConnection>;
