using Microsoft.Extensions.Logging;
using DomainResults.Common;
using MongoDB.Driver;
using DataProviders.Abstractions;
namespace DataProviders.Buckets {
  /// 
  /// 
  /// 
  public interface IImagesBucketDataProvider {
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    (Guid?, IDomainResult) Upload(Guid siteId, Guid userId, BucketFile file);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    (List?, IDomainResult) UploadMany(Guid siteId, Guid userId, List files);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    (BucketFile?, IDomainResult) Download(Guid siteId, Guid userId, Guid fileId);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    IDomainResult DeleteOne(Guid siteId, Guid userId, Guid fileId);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    IDomainResult DeletMany(Guid siteId, Guid userId);
  }
  /// 
  /// 
  /// 
  public class ImagesBucketDataProvider : BucketDataProviderBase, IImagesBucketDataProvider {
    private const string _bucketName = "images";
    /// 
    /// 
    /// 
    /// 
    /// 
    public ImagesBucketDataProvider(
      ILogger logger,
      IMongoClient client
    ) : base(logger, client) { }
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public (Guid?, IDomainResult) Upload(Guid siteId, Guid userId, BucketFile file) => Upload(siteId, userId, file, _bucketName);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public (List?, IDomainResult) UploadMany(Guid siteId, Guid userId, List files) => UploadMany(siteId, userId, files, _bucketName);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public (BucketFile?, IDomainResult) Download(Guid siteId, Guid userId, Guid fileId) => Download(siteId, userId, fileId, _bucketName);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public IDomainResult DeleteOne(Guid siteId, Guid userId, Guid fileId) => DeleteOne(siteId, userId, fileId, _bucketName);
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    public IDomainResult DeletMany(Guid siteId, Guid userId) => DeleteMany(siteId, userId, _bucketName);
  }
}