package com.bocloud.cmp.provider.blob;

import com.bocloud.cmp.model.azure.account.StorageAccountModel;
import com.bocloud.cmp.provider.SuperProvider;
import com.bocloud.common.model.BocloudResult;

import java.io.File;
import java.io.OutputStream;

/**
 * 对象存储blob访问接口
 *
 * @author wangyu
 * @version 5.0.0-SNAPSHOT
 * @since 2021/2/1
 */
public interface BlobProvider extends SuperProvider {

    /**
     * 上传文件到容器
     *
     * @param file             要上传的文件
     * @param blobType         blob类型
     * @param standardBlobTier 访问层
     * @param containerName    容器名
     * @param account          存储账号
     * @return
     */
    default BocloudResult upload(File file, String blobType, String standardBlobTier, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 从容器下载文件
     *
     * @param outputStream  输出流
     * @param blobName      blob名称
     * @param containerName 容器名
     * @param account       存储账号
     * @return
     */
    default BocloudResult download(OutputStream outputStream, String blobName, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 从容器下载文件
     *
     * @param filePath
     * @param blobName
     * @param containerName
     * @param account
     * @return
     */
    default BocloudResult download(String filePath, String blobName, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 删除blob
     *
     * @param blobName      blob名称
     * @param containerName 容器名称
     * @param account       存储账号
     * @return
     */
    default BocloudResult delete(String blobName, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 创建快照
     *
     * @param blobName      blob名称
     * @param containerName 容器名称
     * @param account       存储账号
     * @return
     */
    default BocloudResult createSnapshot(String blobName, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 删除快照
     *
     * @param snapshotName  快照名称
     * @param snapshotId    快照ID
     * @param containerName 容器名称
     * @param account       存储账号
     * @return
     */
    default BocloudResult deleteSnapshot(String snapshotName, String snapshotId, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 下载快照
     *
     * @param filePath      文件下载路径
     * @param snapshotName  快照名称
     * @param snapshotId    快照ID
     * @param containerName 容器名称
     * @param account       存储账号
     * @return
     */
    default BocloudResult downloadSnapshot(String filePath, String snapshotName, String snapshotId, String containerName, StorageAccountModel account) {
        return null;
    }

    /**
     * 更改blob或快照访问层
     *
     * @param blobOrSnapshotName blob或快照名称
     * @param snapshotId         快照id
     * @param standardBlobTier   访问层
     * @param containerName      容器名称
     * @param account            存储账号
     * @return
     */
    default BocloudResult uploadStandardBlobTier(String blobOrSnapshotName, String snapshotId, String standardBlobTier, String containerName, StorageAccountModel account) {
        return null;
    }


}
