using CoviDok.BLL.Storage;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Minio;
using Microsoft.Extensions.Options;

namespace CoviDok.Data.StorageProviders
{
    public class MinioProvider : IStorageProvider
    {
        private readonly MinioClient Client = null;

        public static MinioSettings _settings;
        public MinioProvider()
        {
            //var _settings = options.Value;
            Client = new MinioClient(_settings.HostName, _settings.AccessKey, _settings.SecretKey);
        }
 
    public async Task CreateNamespace(string ns)
        {
            await Client.MakeBucketAsync(ns);
        }

        public async Task Download(string ns, string objectname, Action<Stream> callback)
        {
            await Client.GetObjectAsync(ns, objectname, callback);
        }

        public async Task<bool> NamespaceExists(string ns)
        {
            Console.WriteLine("MinioProvider:NamespaceExists - Checking " + ns);
            bool exists =  await Client.BucketExistsAsync(ns);
            Console.WriteLine("MinioProvider:NamespaceExists - " + ns + " exists" );
            return exists;
        }

        public async Task Upload(string ns, string objectname, Stream data, long size)
        {
            await Client.PutObjectAsync(ns, objectname, data, size);
        }

        public async Task<bool> ObjectExists(string ns, string objectname)
        {
            try {
                await Client.StatObjectAsync(ns, objectname);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            
        }
    }
}