/**
 * @packageDocumentation
 * @module api
 */
import { Observable } from 'rxjs';
import { CRYPTO_TYPE, DeepPartial, KubernetesResource, ResourceListParams } from '../core/public-api';
export type K8sResourceDefinition = Readonly<{
    type: string;
    apiGroup?: string;
    apiVersion?: string;
}>;
export type K8sResourceDefinitions = Readonly<Record<string, K8sResourceDefinition>>;
export interface ApiDefinitionBaseParams {
    definition: K8sResourceDefinition;
}
export interface ApiTypeBaseParams<T extends string> {
    /**
     * @deprecated 请使用 definition 参数
     */
    type: T;
}
export type ApiBaseParams<T extends string> = {
    notifyOnError?: boolean;
    onlyMetadata?: boolean;
    customAccept?: string;
    crypto?: CRYPTO_TYPE;
} & (ApiDefinitionBaseParams | ApiTypeBaseParams<T>);
export type ResourceBaseParams<T extends string> = ApiBaseParams<T> & {
    name: string;
};
export type ResourceListBaseParams<T extends string> = ApiBaseParams<T> & {
    queryParams?: ResourceListParams;
};
export interface WatchApiParams {
    active$?: Observable<boolean>;
    keepalive?: boolean;
    downgradePolling?: number;
    retry?: true | {
        count?: number;
        delay?: number;
    };
}
export interface GlobalResourceBaseParams {
    namespaced?: boolean;
    namespace?: string;
}
export type GlobalResourceParams<T extends string> = ResourceBaseParams<T> & GlobalResourceBaseParams;
export type WatchGlobalResourceParams<T extends string> = GlobalResourceParams<T> & WatchApiParams;
export type GlobalResourceListParams<T extends string> = ResourceListBaseParams<T> & GlobalResourceBaseParams;
export type WatchGlobalResourceListParams<T extends string> = GlobalResourceListParams<T> & WatchApiParams;
export interface ErebusResourceBaseParams {
    cluster?: string;
    namespace?: string;
}
export type ErebusResourceParams<T extends string> = ResourceBaseParams<T> & ErebusResourceBaseParams;
export type WatchErebusResourceParams<T extends string> = ErebusResourceParams<T> & WatchApiParams;
export type ErebusResourceListParams<T extends string> = ResourceListBaseParams<T> & ErebusResourceBaseParams;
export type WatchErebusResourceListParams<T extends string> = ErebusResourceListParams<T> & WatchApiParams;
export type ResourceReadParams<T extends string> = GlobalResourceParams<T> | ErebusResourceParams<T>;
export type WatchResourceReadParams<T extends string> = WatchGlobalResourceParams<T> | WatchErebusResourceParams<T>;
export type ResourceListReadParams<T extends string> = GlobalResourceListParams<T> | ErebusResourceListParams<T>;
export type WatchResourceListReadParams<T extends string> = WatchGlobalResourceListParams<T> | WatchErebusResourceListParams<T>;
export type ResourceBaseWriteParams<T extends KubernetesResource, R extends string> = ApiBaseParams<R> & {
    resource: T;
};
/**
 * patch 资源时需要传递完整的原始资源 (resource) 和更新的部分 (part)
 */
export type ResourceBasePatchParams<T extends KubernetesResource, R extends string> = (ResourceBaseWriteParams<T, R> | ResourceBaseParams<R>) & {
    operation?: PatchOperation;
    part: DeepPartial<T> | JSONPatch[];
};
export interface ResourceDeleteAdditionalParams {
    body?: unknown;
}
export type GlobalResourceWriteParams<T extends KubernetesResource, R extends string> = ResourceBaseWriteParams<T, R> & GlobalResourceBaseParams;
export type GlobalResourcePatchParams<T extends KubernetesResource, R extends string> = ResourceBasePatchParams<T, R> & GlobalResourceBaseParams;
export type GlobalResourceDeleteParams<T extends KubernetesResource, R extends string> = (GlobalResourceWriteParams<T, R> | GlobalResourceParams<R>) & ResourceDeleteAdditionalParams;
export type ErebusResourceWriteParams<T extends KubernetesResource, R extends string> = ResourceBaseWriteParams<T, R> & ErebusResourceBaseParams;
export type ErebusResourcePatchParams<T extends KubernetesResource, R extends string> = ResourceBasePatchParams<T, R> & ErebusResourceBaseParams;
export type ErebusResourceDeleteParams<T extends KubernetesResource, R extends string> = (ErebusResourceWriteParams<T, R> | ErebusResourceParams<R>) & ResourceDeleteAdditionalParams;
export type ErebusResourceBatchDeleteParams<R extends string> = ErebusResourceListParams<R> & ResourceDeleteAdditionalParams;
export type ResourceWriteParams<R extends string, T extends KubernetesResource = KubernetesResource> = GlobalResourceWriteParams<T, R> | ErebusResourceWriteParams<T, R>;
export type ResourcePatchParams<R extends string, T extends KubernetesResource = KubernetesResource> = GlobalResourcePatchParams<T, R> | ErebusResourcePatchParams<T, R>;
export type ResourceDeleteParams<R extends string, T extends KubernetesResource = KubernetesResource> = GlobalResourceDeleteParams<T, R> | ErebusResourceDeleteParams<T, R>;
export type ResourceApiParams<T extends string> = GlobalResourceListParams<T> | ErebusResourceListParams<T> | ResourceReadParams<T> | ResourceWriteParams<T> | ResourcePatchParams<T> | ResourceDeleteParams<T>;
export declare enum PatchOperation {
    JSON = "application/json-patch+json",
    Merge = "application/merge-patch+json",
    StrategicMerge = "application/strategic-merge-patch+json"
}
export declare enum JSONPatchOp {
    Test = "test",
    Remove = "remove",
    Add = "add",
    Replace = "replace",
    Move = "move",
    Copy = "copy"
}
export type JSONPatch = {
    op: JSONPatchOp.Test | JSONPatchOp.Add | JSONPatchOp.Replace;
    path: string;
    value: unknown;
} | {
    op: JSONPatchOp.Remove;
    path: string;
} | {
    op: JSONPatchOp.Move | JSONPatchOp.Copy;
    from: string;
    path: string;
};
export interface WatchAPIResponse<T extends KubernetesResource> {
    type: WatchEvent;
    object: T;
}
export declare enum WatchEvent {
    Added = "ADDED",
    Modified = "MODIFIED",
    Deleted = "DELETED",
    Error = "ERROR",
    Bookmark = "BOOKMARK"
}
