import type { RequestData as IRequestData } from './squared';

import type { ExternalAsset } from './asset';
import type { HostInitConfig, HostInitLog } from './core';
import type { DownloadModule, ErrorModule, LoggerModule, MemoryModule, NodeModule, PermissionModule, ProcessModule, RequestModule, TempModule } from './settings';

export interface RequestData<T extends ExternalAsset = ExternalAsset, U extends HostInitLog = HostInitLog> extends Readonly<Omit<IRequestData, "log">>, Readonly<HostInitConfig<U>> {
    readonly assets?: T[];
}

export interface Settings {
    temp_dir?: string;
    temp?: TempModule;
    node?: NodeModule;
    process?: ProcessModule;
    permission?: PermissionModule;
    memory?: MemoryModule;
    download?: DownloadModule;
    request?: RequestModule;
    error?: ErrorModule;
    logger?: LoggerModule;
}

export interface ErrorCode<T = unknown> extends Error {
    code?: T;
}

export type HighResolutionTime = bigint | [number, number];