import { ErrorInterceptor } from "./errorInterceptor";

import { RequestInterceptor } from "./requestInterceptor";

import {
  TResponse,
  ResponseHandleArgs,
  ResponseInterceptor
} from "./responseInterceptor";

export interface BaseConfig {
  prefix?: string;
  fetchOption?: object;
  responseHandle?: (params: ResponseHandleArgs) => Promise<TResponse>;
}
export interface FetchConfig extends BaseConfig {
  interceptor?: {
    requestInterceptor?: Array<Interceptor["requestInterceptor"]>;
    responseInterceptor?: Array<Interceptor["responseInterceptor"]>;
    errorInterceptor?: Array<Interceptor["errorInterceptor"]>;
  };
}

export interface GlobalConfig extends BaseConfig {
  interceptor?: {
    requestInterceptor?: Interceptor["requestInterceptor"];
    responseInterceptor?: Interceptor["responseInterceptor"];
    errorInterceptor?: Interceptor["errorInterceptor"];
  };
}

export interface Interceptor {
  requestInterceptor: RequestInterceptor;
  responseInterceptor: ResponseInterceptor;
  errorInterceptor: ErrorInterceptor;
}

export interface FastOptions {
  method: string;
  headersType?: string;
}

export * from "./responseInterceptor";
export * from "./requestInterceptor";
export * from "./errorInterceptor";
