using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;

namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
    public class FindTaskListItem : FindLineTreeViewItem
    {
        public FindTaskListItem(string fileFullPath, string fileShortName, int lineNumber, int startLineOffset, int keywordLength, string lineText, Brush foreColor, ItemType type, TextDecorationCollection textDecorations = null) : base(fileFullPath, fileShortName, lineNumber, startLineOffset, keywordLength, lineText, foreColor, type, textDecorations)
        {
        }

        /// <summary>
        /// 用于刷新StartDateTime和EndDateTime的值。
        /// </summary>
        public void UpdateDateTime()
        {
            DateTime? dtS = null;
            DateTime? dtE = null;

            foreach (var subitem in this.Items)
            {
                var item = subitem as FindTaskListTimeTagItem;
                if (item == null) continue;

                if (dtS == null || dtS.HasValue == false) dtS = item.TagDateTime;
                else
                {
                    if (dtS.Value.CompareTo(item.TagDateTime.Value) > 0)
                    {
                        dtS = item.TagDateTime;
                    }
                }

                if (dtE == null || dtE.HasValue == false) dtE = item.TagDateTime;
                else
                {
                    if (dtE.Value.CompareTo(item.TagDateTime.Value) < 0)
                    {
                        dtE = item.TagDateTime;
                    }
                }
            }

            if (dtS != null && dtS.HasValue) StartDateTime = dtS.Value;

            if (dtE != null && dtE.HasValue) EndDateTime = dtE.Value;
        }

        /// <summary>
        /// Begin time Or First time.
        /// 注意:在使用之前应调用UpdateDateTime()方法刷新其值。
        /// </summary>
        public DateTime StartDateTime { get; private set; }

        /// <summary>
        /// Finish time Or Abort time.
        /// 注意:在使用之前应调用UpdateDateTime()方法刷新其值。
        /// </summary>
        public DateTime EndDateTime { get; private set; }
    }
}