import { CancellablePromise, RecursiveRecord, CacheStore } from '@dvcol/common-utils';
import { BaseRequest, BaseTemplateOptions, BaseTemplate, BaseInit } from './base-template.model.cjs';

type BaseQuery<R extends BaseRequest = BaseRequest, Q = unknown> = {
    /** The request information. */
    request: R;
    /** The query promise. */
    query: CancellablePromise<Q>;
};
type BaseSettings<S extends RecursiveRecord = RecursiveRecord> = S & {
    /** The domain name (i.e. https://api.domain.ext) */
    endpoint: string;
    /** A cors proxy endpoint to use for requests when in a browser */
    corsProxy?: string;
    /** A cors prefix to use for requests when in a browser */
    corsPrefix?: string;
};
type BaseOptions<S extends BaseSettings = BaseSettings, R extends Response = Response> = S & {
    /** Optional cache store to manage cache read/write */
    cacheStore?: CacheStore<R>;
};
type BaseTransformed<P extends RecursiveRecord = RecursiveRecord, O extends BaseTemplateOptions = BaseTemplateOptions> = {
    template: BaseTemplate<P, O>;
    params: P;
    init: BaseInit;
};

export type { BaseOptions, BaseQuery, BaseSettings, BaseTransformed };
