using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

namespace CoviDok.BLL.Storage
{
    class StorageHandler
    {
        private readonly IStorageProvider storageProvider;

        public StorageHandler(IStorageProvider provider)
        {
            //Client = new MinioClient(
            //"192.168.0.160:9000",
            //"secretaccesskey",
            //"secretsecretkey");
            storageProvider = provider;
        }

        public async Task<StorageResult> UploadImage(string BucketName, Stream FilePath, long size, string ObjectName)
        {
            try
            {
                // Make a bucket on the server, if not already present.
                bool found = await storageProvider.NamespaceExists(BucketName);
                if (!found)
                {
                    await storageProvider.CreateNamespace(BucketName);
                }
                // Upload a file to bucket.
                await storageProvider.Upload(BucketName, ObjectName, FilePath, size);
                return new StorageResult(true, BucketName + ":" + ObjectName);
            }
            catch (Exception e)
            {
                return new StorageResult(false, e.Message);
            }
        }

        public async Task GetImage(string bucketName, string ImageID, Action<Stream> callback)
        {
            await storageProvider.Download(bucketName, ImageID, callback);
        }
    }
}