using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using XdCxRhDW.WebApi;
namespace XdCxRhDW.WebApi
{
    /// 
    ///文件上传接口
    /// 
    public class FileController : BaseController
    {
        private readonly string uploadFolder;
        /// 
        /// 
        /// 
        public FileController()
        {
            this.uploadFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot");
        }
        /// 
        /// 上传文件(返回上传后的文件名)
        /// 
        /// 
        [HttpPost, SwaggerForm]
        public async Task> UploadFileAsync()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                bool s = Request.Content.IsFormData();
                return Error("请求数据不是form-data类型");
            }
            var provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);
            Directory.CreateDirectory(uploadFolder);
            var content = provider.Contents.First();
            var fileName = Guid.NewGuid().ToString() + ".dat";
            var fileData = await content.ReadAsByteArrayAsync();
            // 将文件保存到本地文件夹中
            var filePath = Path.Combine(uploadFolder, fileName);
            if (File.Exists(filePath))
            {
                Serilog.Log.Warning($"文件[{filePath}]已存在!");
            }
            using (var fileStream = new FileStream(filePath, FileMode.Create))
            {
                await fileStream.WriteAsync(fileData, 0, fileData.Length);
            }
            return Success(fileName);
        }
        /// 
        /// 批量删除文件
        /// 
        /// 参数文件参数模型
        /// 返回删除成功的文件个数
        [HttpPost]
        public AjaxResult DeleteFiles(FileDeleteDto dto)
        {
            if(dto.Files==null||dto.Files.Count==0)return Success(0);
            int count = 0;
            foreach (var fileName in dto.Files)
            {
                try
                {
                    var file = Path.Combine(uploadFolder, fileName);
                    if (File.Exists(file))
                    {
                        File.Delete(file);
                        count++;
                    }
                }
                catch (Exception ex)
                {
                    Serilog.Log.Error(ex, $"删除文件[{fileName}]失败!");
                }
            }
            return Success(count);
        }
    }
}