// typings/index.d.ts
// index.d.ts

// declare module "integration-websocket-rest-api" {
//   export class ApiClient {
//     constructor(apiUrl: string, headers?: Record<string, string>);
//     apiUrl: string;
//     sendRequest(method: string, data: any): Promise<any>;
//   }

declare module "integration-websocket-rest-api" {
  interface ApiClientOptions {
    apiUrl: string;
    headers?: Record<string, string>;
    maxRetries?: number;
    retryDelay?: number;
    timeout?: number;
    errorHandler?: (error: Error) => void;
  }

  type RequestInterceptor = (
    config: import("axios").AxiosRequestConfig
  ) => void;
  type ResponseInterceptor = (
    response: import("axios").AxiosResponse
  ) => import("axios").AxiosResponse;

  export class ApiClient {
    constructor(apiUrl: string, headers?: Record<string, string>);

    setGlobalHeaders(headers: Record<string, string>): void;
    setMaxRetries(maxRetries: number): void;
    setRetryDelay(retryDelay: number): void;
    setTimeout(timeout: number): void;
    setErrorHandler(errorHandler: (error: Error) => void): void;
    addRequestInterceptor(interceptor: RequestInterceptor): void;
    addResponseInterceptor(interceptor: ResponseInterceptor): void;

    sendRequest(method: string, data?: any, retryCount?: number): Promise<any>;
  }

  export class WebSocketClient {
    constructor(wsUrl: string);
    wsUrl: string;
    openConnection(): Promise<void>;
    connect(): Promise<void>;
    reconnect(): void;
    sendMessage(message: string): void;
    getMessage(callback: (message: string) => void): void;
    getReceivedMessages(): string[];
    closeConnection(): void;
  }
}
