import { AxiosInstance } from 'axios';
import { PaginationParams, PaginatedResponse } from './common';
/**
 * Interface for image data
 */
export interface Image {
    id: string;
    label: string;
    description: string | null;
    created: string;
    updated: string;
    type: 'manual' | 'automatic';
    status: 'available' | 'creating' | 'pending_upload' | 'deleted';
    is_public: boolean;
    size: number;
    created_by: string;
    vendor: string | null;
    deprecated: boolean;
    expiry: string | null;
}
/**
 * Interface for creating an image
 */
export interface CreateImageRequest {
    disk_id: number;
    label: string;
    description?: string;
}
/**
 * Interface for uploading an image
 */
export interface UploadImageRequest {
    label: string;
    description?: string;
    region: string;
}
/**
 * Interface for updating an image
 */
export interface UpdateImageRequest {
    label?: string;
    description?: string;
}
/**
 * Interface for image replication to regions
 */
export interface ReplicateImageRequest {
    regions: string[];
}
/**
 * Interface for the Images client
 */
export interface ImagesClient {
    /**
     * List all images
     */
    getImages(params?: PaginationParams): Promise<PaginatedResponse<Image>>;
    /**
     * Get a specific image by ID
     */
    getImage(imageId: string): Promise<Image>;
    /**
     * Create a new image from an existing disk
     */
    createImage(data: CreateImageRequest): Promise<Image>;
    /**
     * Upload a new image
     */
    uploadImage(data: UploadImageRequest): Promise<{
        image: Image;
        upload_url: string;
    }>;
    /**
     * Update an existing image
     */
    updateImage(imageId: string, data: UpdateImageRequest): Promise<Image>;
    /**
     * Delete an image
     */
    deleteImage(imageId: string): Promise<{}>;
    /**
     * Replicate an image to other regions
     */
    replicateImage(imageId: string, data: ReplicateImageRequest): Promise<{}>;
    getSharegroups(params?: PaginationParams): Promise<PaginatedResponse<any>>;
    getSharegroup(sharegroupId: number): Promise<any>;
    createSharegroup(data: {
        label: string;
        description?: string;
    }): Promise<any>;
    updateSharegroup(sharegroupId: number, data: {
        label?: string;
        description?: string;
    }): Promise<any>;
    deleteSharegroup(sharegroupId: number): Promise<{}>;
    getSharegroupImages(sharegroupId: number, params?: PaginationParams): Promise<PaginatedResponse<any>>;
    addSharegroupImages(sharegroupId: number, data: {
        images: string[];
    }): Promise<any>;
    updateSharegroupImage(sharegroupId: number, imageId: string): Promise<any>;
    removeSharegroupImage(sharegroupId: number, imageId: string): Promise<{}>;
    getSharegroupMembers(sharegroupId: number, params?: PaginationParams): Promise<PaginatedResponse<any>>;
    getSharegroupMember(sharegroupId: number, tokenUuid: string): Promise<any>;
    addSharegroupMembers(sharegroupId: number, data: Record<string, any>): Promise<any>;
    updateSharegroupMember(sharegroupId: number, tokenUuid: string, data: Record<string, any>): Promise<any>;
    removeSharegroupMember(sharegroupId: number, tokenUuid: string): Promise<{}>;
    getSharegroupTokens(params?: PaginationParams): Promise<PaginatedResponse<any>>;
    getSharegroupToken(tokenUuid: string): Promise<any>;
    createSharegroupToken(data: Record<string, any>): Promise<any>;
    updateSharegroupToken(tokenUuid: string, data: Record<string, any>): Promise<any>;
    deleteSharegroupToken(tokenUuid: string): Promise<{}>;
    getTokenSharegroup(tokenUuid: string): Promise<any>;
    getTokenSharegroupImages(tokenUuid: string, params?: PaginationParams): Promise<PaginatedResponse<any>>;
    getImageSharegroups(imageId: string, params?: PaginationParams): Promise<PaginatedResponse<any>>;
}
/**
 * Create a client for interacting with the Linode Images API
 */
export declare function createImagesClient(axios: AxiosInstance): ImagesClient;
