import {browser} from "process"
import {Task} from "./task"
import {TaskQueue} from "./taskQueue"
import {FetchAdapter, FetchAdapterResponse} from "./fetchAdapter"
import {NextNetwork} from "./nextNetwork"
import {BaseError} from "./errors/baseError";
import {HttpStatusError} from "./errors/httpStatusError";
import {ResponseHelpers} from "./utils/responseHelpers";

/**
 * ## 暴露的接口方法对象
 * ## {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError}
 * 1. Task **任务实体**<br>
 * 作用：定义了一个任务实体上应该有的方法
 * 2. TaskQueue **任务队列管理**<br>
 * 作用：管理每个任务的执行状态和重试报错等机制
 * 3. FetchAdapter **http适配器**<br>
 * 作用：请求请求接口数据的方法 可以根据自己的实际情况继承适配器再作修改
 * 4. NextNetwork **网络管理器**<br>
 * 作用：对任务队列和http适配器集中调度
 * 5. FetchAdapterResponse **http响应体**<br>
 * 作用：统一的响应体结构
 * 6. BaseError **基础错误类**<br>
 * 作用：错误信息继承的基础对象
 * 7. HttpStatusError **http code 错误**<br>
 * 作用：默认 http status 不在 successStatusCode 列表里面 则会报错
 * 8. ResponseHelpers **response工具类**<br>
 * 作用：提供一些Response辅助的工具类
 * **/
const index: {
    Task: Task,
    TaskQueue: TaskQueue,
    FetchAdapter: FetchAdapter,
    NextNetwork: NextNetwork,
    FetchAdapterResponse: FetchAdapterResponse,
    BaseError: BaseError,
    HttpStatusError: HttpStatusError,
    ResponseHelpers: ResponseHelpers
    // @ts-ignore
} = {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError, ResponseHelpers}

if (browser) {
    // @ts-ignore
    window.NextNetworkBrowser = index
}

export {Task, TaskQueue, FetchAdapter, NextNetwork, FetchAdapterResponse, BaseError, HttpStatusError, ResponseHelpers}

export default index
