using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
    /// <summary>
    /// 用于编制 CHM 目录文件中各条目的类。
    /// </summary>
    public class ChmContentEntry
    {
        /// <summary>
        /// 取 FileSystemInfo.Name 的 URL 转义形式。
        /// </summary>
        public string UrlName
        {
            get { return CustomMarkdownSupport.UrlEncode(FileSystemInfo.Name); }
        }

        /// <summary>
        /// 取 FileSystemInfo.FullName 的 URL 转义形式。
        /// </summary>
        public string UrlFullName
        {
            get { return CustomMarkdownSupport.UrlEncode(FileSystemInfo.FullName); }
        }

        /// <summary>
        /// 此条目指向的文件系统条目(文件或文件夹)的信息。
        /// </summary>
        public FileSystemInfo FileSystemInfo { get; set; }

        /// <summary>
        /// 此条目指向的是个文件。
        /// </summary>
        public bool IsFile { get; set; }

        /// <summary>
        /// 此条目指向的是个目录。
        /// </summary>
        public bool IsDirectory { get; set; }

        /// <summary>
        /// 文件或目录的短名称。可能包括开头的数字序号或尾部的文件后缀名等信息。
        /// </summary>
        public string ShortName { get; set; }

        /// <summary>
        /// CHM 条目使用的标题文本,与目录短名并不一定一致。
        /// 很可能是从目录短名格式化而来。
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// 这是指在 CHM 中挂接到某个目录的 Html 文件。在 LME 中被称为“目录元文件”,
        /// 元文件总是在对应目录下,且文件名总是“_目录名.html”。
        /// 磁盘中结构会是:../../某目录/_某目录.html。
        /// </summary>
        public string DirectoryMetaFile { get; set; }
    }

    /// <summary>
    /// 用于 CHM 目录文件中同级目录的各条目的排序。
    /// </summary>
    public class ChmContentEntryCompare : IComparer<ChmContentEntry>
    {
        /// <summary>
        /// 按文件短名来排序。
        /// </summary>
        public int Compare(ChmContentEntry x, ChmContentEntry y)
        {
            return x.ShortName.CompareTo(y.ShortName);
        }
    }
}