//Source https://github.com/OrchardCMS/OrchardCore/tree/dev/src/OrchardCore

using Grand.Business.Core.Interfaces.Storage;
using Microsoft.Extensions.FileProviders.Physical;

namespace Grand.Business.Storage.Services
{
    public class DefaultMediaFileStore : IMediaFileStore
    {
        private readonly IFileStore _fileStore;

        public DefaultMediaFileStore(
            IFileStore fileStore)
        {
            _fileStore = fileStore;
        }


        public virtual Task<IFileStoreEntry> GetFileInfo(string path)
        {
            return _fileStore.GetFileInfo(path);
        }

        public virtual IFileStoreEntry GetDirectoryInfo(string path)
        {
            return _fileStore.GetDirectoryInfo(path);
        }
        public virtual Task<PhysicalDirectoryInfo> GetPhysicalDirectoryInfo(string directoryPath)
        {
            return _fileStore.GetPhysicalDirectoryInfo(directoryPath);
        }

        public virtual IList<IFileStoreEntry> GetDirectoryContent(string path = null, bool includeSubDirectories = false, bool listDirectories = true, bool listFiles = true)
        {
            return _fileStore.GetDirectoryContent(path, includeSubDirectories, listDirectories, listFiles);
        }

        public virtual bool TryCreateDirectory(string path)
        {
            return _fileStore.TryCreateDirectory(path);
        }

        public virtual Task<bool> TryRenameDirectory(string path, string newpath)
        {
            return _fileStore.TryRenameDirectory(path, newpath);
        }

        public virtual async Task<bool> TryDeleteFile(string path)
        {
            var result = await _fileStore.TryDeleteFile(path);

            return result;
        }

        public virtual async Task<bool> TryDeleteDirectory(string path)
        {
            var result = await _fileStore.TryDeleteDirectory(path);
            return result;
        }

        public virtual async Task MoveFile(string oldPath, string newPath)
        {
            await _fileStore.MoveFile(oldPath, newPath);
        }

        public virtual Task CopyFile(string srcPath, string dstPath)
        {
            return _fileStore.CopyFile(srcPath, dstPath);
        }
        public virtual Task RenameFile(string file, string newName)
        {
            return _fileStore.RenameFile(file, newName);
        }
        public virtual Task<Stream> GetFileStream(string path)
        {
            return _fileStore.GetFileStream(path);
        }

        public virtual Task<Stream> GetFileStream(IFileStoreEntry fileStoreEntry)
        {
            return _fileStore.GetFileStream(fileStoreEntry);
        }

        public virtual async Task<string> CreateFileFromStream(string path, Stream inputStream, bool overwrite = false)
        {
            return await _fileStore.CreateFileFromStream(path, inputStream, overwrite);
        }
        public virtual Task<string> ReadAllText(string path)
        {
            return _fileStore.ReadAllText(path);
        }
        public virtual Task WriteAllText(string path, string text)
        {
            return _fileStore.WriteAllText(path, text);
        }
    }
}
