import { LayerItem, LayerManager, BasePlugin, Earth } from 'dde-earth';
import { ImageryLayer } from 'cesium';
import { TIFFImageryProviderOptions, TIFFImageryProviderRenderOptions } from 'tiff-imagery-provider';

declare module "dde-earth" {
    namespace LayerManager {
        interface Loaders extends TIFFLayerLoader.Loaders {
        }
    }
}

declare class TIFFLayerItem extends LayerItem<TIFFLayerItem.Data, TIFFLayerItem.Instance> {
    defaultRenderOptions: TIFFLayerItem.RenderOptions;
    get show(): boolean;
    set show(val: boolean);
    _init(data: TIFFLayerItem.Data): Promise<ImageryLayer>;
    _remove(): boolean;
    zoomTo(options?: LayerItem.ZoomToOptions): void;
    static basicRender(layer: ImageryLayer | undefined, options?: TIFFLayerItem.BasicRenderOptions): void;
    _render(options: TIFFLayerItem.RenderOptions): Promise<ImageryLayer | undefined>;
}
declare namespace TIFFLayerItem {
    type Method = "tiff";
    type Data = LayerManager.BaseLayer<Method, RenderOptions> & TIFFImageryProviderOptions & {
        url: string | File | Blob;
    };
    type Instance = ImageryLayer;
    type BasicRenderOptions = {
        alpha?: number;
        brightness?: number;
        hue?: number;
        saturation?: number;
        gamma?: number;
        contrast?: number;
    };
    type RenderOptions = BasicRenderOptions & TIFFImageryProviderRenderOptions;
}

declare class TIFFLayerLoader extends BasePlugin {
    readonly defaultRenderOptions: NonNullable<Required<TIFFLayerLoader.Options["defaultRenderOptions"]>>;
    constructor(options?: TIFFLayerLoader.Options);
    init(earth: Earth): this;
}
declare namespace TIFFLayerLoader {
    interface Options extends BasePlugin.Options {
        defaultRenderOptions?: TIFFLayerItem.RenderOptions;
    }
    interface Loaders {
        tiff: (earth: Earth, data: TIFFLayerItem.Data) => Promise<TIFFLayerItem>;
    }
}

export { TIFFLayerItem, TIFFLayerLoader };
