import { Optional, Resource } from "../../common";
import { APIFile, FileDownloadResponse, FileShareResponse, FileType, FileUploadResponse, StoreFile, UserFileUploadStatus } from "./interfaces";
export declare class File extends Resource {
    fileName: string;
    fileType: FileType;
    userId: string;
    profileId: string;
    createdAt: string;
    uploadStatus: UserFileUploadStatus;
    constructor(fileName: string, fileType: FileType, userId: string, profileId: string, createdAt: string, uploadStatus: UserFileUploadStatus);
    /**
     * The name of the file resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the file resource.
     */
    static get serviceName(): string;
    /**
     * Convert the file into a JSON serializable object for the API server.
     */
    serializeAPI(): Optional<APIFile, "id">;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The file data from the API server.
     */
    deserializeAPI(data: APIFile): void;
    /**
     * Serialize the file into a format for storing in the Redux store.
     */
    serializeRedux(): StoreFile;
    /**
     * Create a file from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The file object.
     */
    static apiFactory(data: APIFile): File;
    /**
     * Create a file from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The file object.
     */
    static reduxFactory(data: StoreFile): File;
    /**
     * Set file upload_status to "uploaded"
     */
    setUploadStatus(): Promise<void>;
    /**
     * Call to get download link for a file.
     * @param id Id of the file to be downloaded.
     */
    static download(id: string): Promise<FileDownloadResponse>;
    /**
     *
     * @param id
     */
    static upload(id: string): Promise<FileUploadResponse>;
    static getShareCredentials(fileId: string): Promise<FileShareResponse>;
}
