using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace Edu.Common.Plugin
{
    /// <summary>
    /// 文件帮助类
    /// </summary>
    public class FileHelper
    {
        /// <summary>
        /// 获取指定文件夹下面的所有文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="serverPath"></param>
        /// <returns></returns>
        public static List<FileItem> GetFileAllPath(string path, string savePath)
        {
            List<FileItem> fileList = new List<FileItem>();
            int leval = 0;
            GetDirectoryAndFile(path, leval, fileList);
            foreach (var item in fileList)
            {
                string str = @"录音";
                Regex reg = new Regex(str);
                string newFileName = Regex.Replace(item.FileName, @"\d", "");
                var fileNameArray = Regex.Split(newFileName, str);
                if (fileNameArray != null && fileNameArray.Length > 0)
                {
                    newFileName = (fileNameArray.Length > 1 ? fileNameArray[1] : fileNameArray[0]).TrimStart().TrimEnd();
                }
                string newPathFileName = savePath + @"\" + newFileName.TrimStart('.')+"3";

                File.Copy(item.FileUrl, newPathFileName, true);
                item.FileUrl = newPathFileName;
            }
            return fileList;
        }

        /// <summary>
        /// 获取所有文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static List<FileItem> GetFileList(string path)
        {
            List<FileItem> fileList = new List<FileItem>();
            DirectoryInfo theFolder = new DirectoryInfo(@path);
            //遍历文件
            foreach (FileInfo NextFile in theFolder.GetFiles())
            {
                string extName = Path.GetExtension(NextFile.Name).ToLower();
                if (extName == ".mp3")
                {
                    fileList.Add(new FileItem()
                    {
                        FileName = NextFile.Name,
                        FileUrl = NextFile.FullName
                    });
                }
            }
            return fileList;
        }

        /// <summary>
        /// 列出path路径对应的文件夹中的子文件夹和文件
        /// 然后再递归列出子文件夹内的文件和文件夹
        /// </summary>
        /// <param name="path">需要列出内容的文件夹的路径</param>
        /// <param name="leval">当前递归层级,用于控制输出前导空格的数量</param>
        private static void GetDirectoryAndFile(string path, int leval, List<FileItem> list)
        {
            DirectoryInfo theFolder = new DirectoryInfo(@path);

            leval++;
            //遍历文件
            foreach (FileInfo NextFile in theFolder.GetFiles())
            {
                for (int i = 0; i < leval; i++)
                {
                    string extName = Path.GetExtension(NextFile.Name).ToLower();
                    if (extName == ".mp3")
                    {
                        list.Add(new FileItem()
                        {
                            FileName = NextFile.Name,
                            FileUrl = NextFile.FullName
                        });
                    }
                }
            }
            //遍历文件夹
            foreach (DirectoryInfo NextFolder in theFolder.GetDirectories())
            {
                for (int i = 0; i < leval; i++)
                {
                    GetDirectoryAndFile(NextFolder.FullName, leval, list);
                }
            }
        }
    }

    /// <summary>
    /// 文件项目
    /// </summary>
    public class FileItem
    {
        /// <summary>
        /// 文件名
        /// </summary>
        public string FileName { get; set; }

        /// <summary>
        /// 文件全路径
        /// </summary>
        public string FileUrl { get; set; }
    }
}