using System;
using System.Collections.Generic;
using System.Linq;
using GxPress.Request.App.WorkMeeting;
using GxPress.Service.Interface.Meeting;

namespace GxPress.Service.Implement.Meeting
{
    public class MeetingService : IMeetingService
    {
        /// <summary>
        /// 返回相邻的
        /// </summary>
        /// <param name="nums"></param>
        /// <returns></returns>
        public Dictionary<int, List<int>> GetDictionary(List<int> nums)
        {
            // var nums = new int[] { 1, 2, 3, 5, 6, 89, 100 };
            var keyValue = new Dictionary<int, List<int>>();
            var k = 1;
            for (int i = 0; i < nums.Count; i++)
            {
                List<int> ints = new List<int>();
                if (keyValue.Count == 0)
                {
                    ints.Add(nums[i]);
                    keyValue.Add(k, ints);
                }
                if (keyValue.TryGetValue(k, out ints))
                {
                    if (ints.Contains(nums[i]))
                        continue;
                    var jg = ints.Last();
                    if ((jg + 1) == nums[i])
                    {
                        keyValue.Remove(k);
                        ints.Add(nums[i]);
                        keyValue.Add(k, ints);
                    }
                    else
                    {
                        k++;
                        ints = new List<int>();
                        ints.Add(nums[i]);
                        keyValue.Add(k, ints);
                    }
                }
            }
            return keyValue;
        }
        /// <summary>
        /// 获取会议的订阅时间
        /// </summary>
        /// <param name="orderList"></param>
        /// <returns></returns>
        public Dictionary<List<TimeDictionary>, List<MeetingTime>> GetMeetingTimeDictionary(IEnumerable<Entity.WorkMeeting.MeetingOrder> orderList)
        {
            Dictionary<List<TimeDictionary>, List<MeetingTime>> result = new Dictionary<List<TimeDictionary>, List<MeetingTime>>();
            var orderLists = new List<TimeDictionary>();
            List<MeetingTime> meetingTimes = new List<MeetingTime>();
            //新版
            foreach (var item in orderList)
            {
                if (orderLists.Any(n => n.TimeKey == item.Date.ToString()))
                    continue;
                var timeDictionary = new TimeDictionary();
                timeDictionary.TimeKey = item.Date.ToString();
                var timeValues = orderList.Where(n => n.Date == item.Date).OrderBy(n => n.Hour).Select(n => n.Hour).Distinct().ToList();
                foreach (var timeValue in timeValues)
                {
                    timeDictionary.TimeValues.Add(timeValue);
                    timeDictionary.NewTimeValues.Add(new TimeValue { Key = timeValue, Value = "" });
                }
                orderLists.Add(timeDictionary);
                //获取相邻的
                var nearTimeDictionary = GetDictionary(timeDictionary.TimeValues);
                foreach (var ntd in nearTimeDictionary)
                {
                    var meetingTime = new MeetingTime();
                    var data = item.ToString().Insert(4, "-").Insert(7, "-");
                    var dataTime = Convert.ToDateTime(data);
                    var month = "M";
                    var day = "d";
                    if (dataTime.Month >= 10)
                        month = "MM";
                    if (dataTime.Day >= 10)
                        day = "dd";
                    meetingTime.DateValue = dataTime.ToString($"{month}月{day}日");
                    //获取星期几
                    string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                    string week = Day[Convert.ToInt32(dataTime.DayOfWeek.ToString("d"))].ToString();
                    meetingTime.WeekValue = week;
                    //获取相邻的数据集
                    meetingTime.BeginHour = ntd.Value.First();
                    meetingTime.EndHour = ntd.Value.Last() + 1;
                    meetingTimes.Add(meetingTime);
                }
            }
            result.Add(orderLists, meetingTimes);
            return result;
        }
    }
}