using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Web;
using System.Text.RegularExpressions;
using System.Net;
namespace BLL
{
    public static class FileInsertService
    {
        /// 
        /// 获取服务器图片转byte
        /// 
        /// 
        /// 
        /// 
        public static List FilePathTransStream(string fileHost, string attachUrl)
        {
            List bytes = new List();
            var strs = attachUrl.Trim().Split(',');
            try
            {
                foreach (var fileUrl in strs)
                {
                    string filepath = $"{fileHost}{fileUrl}";
                    // 创建WebClient实例
                    using (WebClient webClient = new WebClient())
                    {
                        // 下载图片并保存到内存流
                        using (MemoryStream ms = new MemoryStream(webClient.DownloadData(filepath)))
                        {
                            // 将MemoryStream转换为byte数组
                            byte[] imageBytes = ms.ToArray();
                            bytes.Add(imageBytes);
                            //// 使用byte数组(例如,保存到文件或进行其他处理)
                            //File.WriteAllBytes("localImage.jpg", imageBytes);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
            return bytes;
        }
        /// 
        /// 获取附件数据流类
        /// 
        /// 附件路径
        /// 
        public static void FileInsert(List fileContextList, string attachUrl)
        {
            if (fileContextList != null && fileContextList.Count > 0)
            {
                string physicalpath = Funs.RootPath;
                //HttpContext.Current.Request.PhysicalApplicationPath;    
                string fullPath = physicalpath + attachUrl;
                if (!File.Exists(fullPath))
                {
                    byte[] fileContext = fileContextList[0];
                    int index = fullPath.LastIndexOf("\\");
                    string filePath = fullPath.Substring(0, index);
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    //string savePath = fullPath + fileName;
                    //文件读写模式
                    System.IO.FileMode fileMode = System.IO.FileMode.Create;
                    //写入文件
                    using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, fileMode, System.IO.FileAccess.Write))
                    {
                        fs.Write(fileContext, 0, fileContext.Length);
                    }
                }
            }
        }
        /// 
        /// 获取多附件数据流类
        /// 
        /// 附件路径
        /// 
        public static void FileMoreInsert(List fileContextList, string attachUrl)
        {
            if (fileContextList != null && fileContextList.Count() > 0)
            {
                if (fileContextList.Count > 0)
                {
                    string[] strs = attachUrl.Trim().Split(',');
                    int i = 0;
                    foreach (var item in fileContextList)
                    {
                        if (strs.Count() > i)
                        {
                            string physicalpath = Funs.RootPath;
                            string fpath = strs[i];
                            string fullPath = physicalpath + fpath;
                            if (!File.Exists(fullPath))
                            {
                                byte[] fileContext = item;
                                string fileName = Regex.Match(fullPath, @"[^/\\?]+(\?.*)?$").Value;
                                string filePath = fullPath.Replace(fileName, "");
                                //int index = fullPath.LastIndexOf("\\");
                                //string filePath = fullPath.Substring(0, index) ;
                                //string filePath = index > 0 ? fullPath.Substring(0, index) : fullPath;
                                try
                                {
                                    if (!Directory.Exists(filePath))
                                    {
                                        Directory.CreateDirectory(filePath);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    ErrLogInfo.WriteLog($"附件【{filePath}】获取异常!");
                                    //continue;
                                }
                                //string savePath = fullPath + fileName;
                                //文件读写模式
                                System.IO.FileMode fileMode = System.IO.FileMode.Create;
                                //写入文件
                                using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, fileMode, System.IO.FileAccess.Write))
                                {
                                    fs.Write(fileContext, 0, fileContext.Length);
                                }
                            }
                            i++;
                        }
                    }
                }
            }
        }
        /// 
        /// 数据和附件插入到多附件表
        /// 
        public static void InsertAttachFile(string attachFileId, string dataId, string attachSource, string attachUrl, List fileContext)
        {
            var getAtt = Funs.DB.AttachFile.FirstOrDefault(x => x.AttachFileId == attachFileId);
            if (getAtt != null)
            {
                Funs.DB.AttachFile.DeleteOnSubmit(getAtt);
                Funs.DB.SubmitChanges();
            }
            //多附件
            var attachFile = Funs.DB.AttachFile.FirstOrDefault(x => x.ToKeyId == dataId);
            if (attachFile == null && !string.IsNullOrEmpty(attachSource))
            {
                Model.AttachFile newAttachFile = new Model.AttachFile
                {
                    AttachFileId = attachFileId,
                    ToKeyId = dataId,
                    AttachSource = attachSource,
                    AttachUrl = attachUrl
                };
                Funs.DB.AttachFile.InsertOnSubmit(newAttachFile);
                Funs.DB.SubmitChanges();
                ////插入附件文件
                BLL.FileInsertService.FileMoreInsert(fileContext, attachUrl);
            }
            else
            {
                if (attachFile.AttachUrl != attachUrl)
                {
                    ///删除附件文件
                    BLL.UploadAttachmentService.DeleteFile(Funs.RootPath, attachFile.AttachUrl);
                    ////插入附件文件
                    BLL.FileInsertService.FileMoreInsert(fileContext, attachUrl);
                    attachFile.AttachSource = attachSource;
                    attachFile.AttachUrl = attachUrl;
                    Funs.DB.SubmitChanges();
                }
            }
        }
        /// 
        /// 数据和附件插入到多附件表【不存实际文件,只存地址】
        /// 
        public static void InsertAttachFileRecord(string attachFileId, string dataId, string attachSource, string attachUrl)
        {
            var getAtt = Funs.DB.AttachFile.FirstOrDefault(x => x.AttachFileId == attachFileId);
            if (getAtt != null)
            {
                Funs.DB.AttachFile.DeleteOnSubmit(getAtt);
                Funs.DB.SubmitChanges();
            }
            //多附件
            var attachFile = Funs.DB.AttachFile.FirstOrDefault(x => x.ToKeyId == dataId);
            if (attachFile == null && !string.IsNullOrEmpty(attachSource))
            {
                Model.AttachFile newAttachFile = new Model.AttachFile
                {
                    AttachFileId = attachFileId,
                    ToKeyId = dataId,
                    AttachSource = attachSource,
                    AttachUrl = attachUrl
                };
                Funs.DB.AttachFile.InsertOnSubmit(newAttachFile);
                Funs.DB.SubmitChanges();
            }
            else
            {
                if (attachFile.AttachUrl != attachUrl)
                {
                    ///删除附件文件
                    BLL.UploadAttachmentService.DeleteFile(Funs.RootPath, attachFile.AttachUrl);
                    attachFile.AttachSource = attachSource;
                    attachFile.AttachUrl = attachUrl;
                    Funs.DB.SubmitChanges();
                }
            }
        }
    }
}