using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ZTools
{
    [RequireComponent(typeof(ZCalendarModel))]
    public class ZCalendar : MonoBehaviour
    {
        /// 
        /// 数据更新时,可获取到每一个日期,并对其进行操作
        /// 
        public event Action UpdateDateEvent;
        /// 
        /// 可以获取到点击的某一天
        /// 
        public event Action ChoiceDayEvent;
        /// 
        /// 选择区间时间事件
        /// 
        public event Action RangeTimeEvent;
        /// 
        /// 日历加载结束
        /// 
        public event Action CompleteEvent;
        /// 
        /// 获取当前选中的天对象
        /// 
        public ZCalendarDayItem CrtTime { get; set; }
        /// 
        /// model
        /// 
        private ZCalendarModel zCalendarModel;
        /// 
        /// controller
        /// 
        private ZCalendarController zCalendarController;
        /// 
        /// 入口
        /// 
        private void Start()
        {
            zCalendarModel = this.GetComponent();
            zCalendarController = new ZCalendarController()
            {
                zCalendar = this,
                zCalendarModel = zCalendarModel,
                pos = this.transform.localPosition
            };
            zCalendarController.Init();
            // 开启时自动初始化
            if (zCalendarModel.awake2Init)
            {
                Init();
            }
        }
        /// 
        /// 按照现在时间初始化
        /// 
        public void Init()
        {
            zCalendarController.InitDate(DateTime.Now);
        }
        /// 
        /// 按照DateTime格式初始化日历
        /// 
        public void Init(DateTime dateTime)
        {
            zCalendarController.InitDate(dateTime);
        }
        /// 
        /// 按照YYYY-MM-DD格式初始化日历
        /// 
        public void Init(string dateTime)
        {
            string[] dateTimes = dateTime.Split('-');
            zCalendarController.InitDate(new DateTime(int.Parse(dateTimes[0]), int.Parse(dateTimes[1]), int.Parse(dateTimes[2])));
        }
        /// 
        /// 显示弹窗
        /// 
        public void Show()
        {
            zCalendarController.Show();
        }
        /// 
        /// 隐藏弹窗
        /// 
        public void Hide()
        {
            Debug.Log("调用了");
            zCalendarController.Hide();
        }
        /// 
        /// 切换时间
        /// 
        /// 
        [Obsolete("事件触发器,请使用UpdateDateEvent获取切换月份时加载的时间对象")]
        public void UpdateDate(ZCalendarDayItem obj)
        {
            if (null != UpdateDateEvent)
            {
                UpdateDateEvent.Invoke(obj);
            }
        }
        /// 
        /// 日期点击
        /// 
        [Obsolete("事件触发器,请使用ChoiceDayEvent获取当前选择的时间")]
        public void DayClick(ZCalendarDayItem dayItem)
        {
            if (null != ChoiceDayEvent)
            {
                ChoiceDayEvent.Invoke(dayItem);
            }
            CrtTime = dayItem;
        }
        /// 
        /// 加载结束
        /// 
        [Obsolete("事件触发器,请使用CompleteEvent获取日历加载完成事件")]
        public void DateComplete()
        {
            if (null != CompleteEvent)
            {
                CompleteEvent.Invoke();
            }
        }
        /// 
        /// 区间日期选择
        /// 
        /// 
        /// 
        [Obsolete("事件触发器,请使用RangeTimeEvent获取区间时间")]
        public void RangeCalendar(ZCalendarDayItem firstDay, ZCalendarDayItem secondDay )
        {
            if (null != RangeTimeEvent)
            {
                RangeTimeEvent.Invoke(firstDay, secondDay);
            }
        }
        private void OnDestroy()
        {
            zCalendarController = null;
            GC.Collect();
        }
    }
}