const app = getApp();
const util = require('../../../utils/util.js');
Page({
  data: {
    activeData:[],//活动列表
    // 新版
    selectDay:{
      year:new Date().getFullYear(),
      month:new Date().getMonth() + 1,
      day:new Date().getDate()
    },
    today: {},//今天
    todaySecond: new Date().getTime(),//今天的秒
    haveActDays:[],//当日有活动的天
    imgPath: util.config.imgPath,
  },
  onLoad: function () {
    let date = new Date()
    this.setData({ 
      today: this.formatDate()
    });
    this.generateAllDays(date.getFullYear(), date.getMonth() + 1)
    this.setNavigationBarTitle()
  },
  setNavigationBarTitle(){
    wx.setNavigationBarTitle({
      title: app.globalData.city.city + '活动日历',
    })
  },
  digit: function (n) {
    if (n == null || n === "" || n == undefined) {
      return "";
    } else {
      return parseInt(n)>=10?n:'0'+n;
    }
  },
  //生成日期格式：2019-5-7
  formatDate: function (date = new Date()) {
    // 年月日
    var year = date.getFullYear()
    var month = date.getMonth() + 1
    var day = date.getDate()
    // 返回值
    let obj={year,month,day,dateStr:[year, this.digit(month), this.digit(day)].join('-')
    }
    return obj;
  },
  //生成当前需要显示的全部日期
  generateAllDays(year, month) {
    let that =this,detaultDay=-1,thisMonth = this.currentMonthDays(year, month)
    util.ajax({
      func: "article/calendar/getCalendarList",
      data: { "starDate": thisMonth[0].date, "endDate": thisMonth[thisMonth.length-1].date },
      load:false
    }, function (res) {
      if (res.code == 0) {
        let data = res.data;
        if (!util.isObjEmpty(data)&&data.length>0) {
          for (let i = 0; i < data.length; i++) {
            const el = data[i];
            let sec=new Date(el.date).getTime();
            if (sec>=that.data.todaySecond) {
              detaultDay=el.date.split('-')[2];
              that.getActiveDetail(el.date);
              break;
            }
          }
        }
        that.setData({haveActDays:data,'selectDay.day':parseInt(detaultDay)});
        that.dateInit()
      }else{
        util.showTips(res.reason);
      }
    })
  },
  //生成本月的值
  currentMonthDays(year, month) {
    const numOfDays = this.getNumOfDays(year, month)
    return this.generateDays(year, month, numOfDays)
  },
  //生成本月的上，或者中，或者下
  generateDays(year, month, daysNum, option = {startNum: 1, notCurrent: false}) {
    const weekMap = ['一', '二', '三', '四', '五', '六', '日']
    let days = []
    for (let i = option.startNum; i <= daysNum; i++) {
      let week = weekMap[new Date(year, month - 1, i).getUTCDay()]
      let day = i;
      days.push({
        date: `${year}-${month}-${day}`,
        event: false,
        day,
        week,
        month,
        year,
        dateSecond: new Date(`${year}/${month}/${day}`).getTime()
      })
    }
    return days
  },
  getNumOfDays(year, month, day = 0) {
    return new Date(year, month, day).getDate()
  },
  getActiveDetail(date){
    let that = this;
    util.ajax({
      func: "article/calendar/getArticleCalendarList",
      data: {date},
      load:false
    }, function (res) {
      if (res.code == 0) {
        res.data.map(el => {
          if (!util.isEmpty(el.discount)) {
            let arr =[];
            if (el.discount.indexOf('+')==-1) {
              arr.push(el.discount);
            } else {
              arr=el.discount.split('+');
            }
            el.discount=arr;
          }
        });
        let activeData = res.data;
        that.setData({ activeData})
      } else {
        util.showTips(res.reason);
      }
    })
  },
  onShareAppMessage() {
    return {
      title: '活动日历，按日历查活动',
      path: '/pages/public/calendar/calendar'
    }
  },
  /**
   * 时间戳转化为年 月 日 时 分 秒
   * time: 需要被格式化的时间，可以被new Date()解析即可
   * format：格式化之后返回的格式，年月日时分秒分别为Y, M, D, h, m, s，这个参数不填的话则显示多久前
   */
  formatTime(time, format) {
    function formatNumber(n) {
      n = n.toString()
      return n[1] ? n : '0' + n
    }

    function getDate(time, format) {
      const formateArr = ['Y', 'M', 'D', 'h', 'm', 's']
      const returnArr = []
      const date = new Date(time)
      returnArr.push(date.getFullYear())
      returnArr.push(formatNumber(date.getMonth() + 1))
      returnArr.push(formatNumber(date.getDate()))
      returnArr.push(formatNumber(date.getHours()))
      returnArr.push(formatNumber(date.getMinutes()))
      returnArr.push(formatNumber(date.getSeconds()))
      for (const i in returnArr) {
        format = format.replace(formateArr[i], returnArr[i])
      }
      return format
    }

    function getDateDiff(time) {
      let r = ''
      const ft = new Date(time)
      const nt = new Date()
      const nd = new Date(nt)
      nd.setHours(23)
      nd.setMinutes(59)
      nd.setSeconds(59)
      nd.setMilliseconds(999)
      const d = parseInt((nd - ft) / 86400000)
      switch (true) {
        case d === 0:
          const t = parseInt(nt / 1000) - parseInt(ft / 1000)
          switch (true) {
            case t < 60:
              r = '刚刚'
              break
            case t < 3600:
              r = parseInt(t / 60) + '分钟前'
              break
            default:
              r = parseInt(t / 3600) + '小时前'
          }
          break
        case d === 1:
          r = '昨天'
          break
        case d === 2:
          r = '前天'
          break
        case d > 2 && d < 30:
          r = d + '天前'
          break
        default:
          r = getDate(time, 'Y-M-D')
      }
      return r
    }
    if (!format) {
      return getDateDiff(time)
    } else {
      return getDate(time, format)
    }
  },
  //上月切换按钮点击
  lastMonth() {
    const lastMonth = new Date(this.data.selectDay.year, this.data.selectDay.month - 2)
    const year = lastMonth.getFullYear()
    const month = lastMonth.getMonth() + 1
    this.setData({'selectDay.year':year,'selectDay.month':month,activeData:[]})
    this.generateAllDays(year, month)
  },
  //下月切换按钮点击
  nextMonth() {
    const nextMonth = new Date(this.data.selectDay.year, this.data.selectDay.month)
    const year = nextMonth.getFullYear()
    const month = nextMonth.getMonth() + 1
    this.setData({'selectDay.year':year,'selectDay.month':month,activeData:[]})
    this.generateAllDays(year, month)
  },
  //设置月份
  setMonth(setYear, setMonth, setDay,index, sid,bol) {
    if (!util.isEmpty(index)) {
      this.setData({selectedMonth:index})
    }
      const data = {
        selectDay: {
          year: setYear,
          month: setMonth,
          day: setDay ? setDay : 0,
          dateString: setYear+'-'+setMonth+'-'+(setDay||0)
        }
      }
      if (!setDay) {
        data.open = true;
      }
      this.setData({selectDay:data.selectDay,s1Sid:sid})
      this.dateInit(setYear, setMonth)
      this.data.selectDay.bol=bol;
      this.triggerEvent("change", this.data.selectDay)
  },
  //日历主体的渲染方法
  dateInit(setYear = this.data.selectDay.year, setMonth = this.data.selectDay.month) {
    let dateList = []; //需要遍历的日历数组数据
    let now = new Date(setYear, setMonth - 1)//当前月份的1号
    let startWeek = now.getDay(); //目标月1号对应的星期
    let dayNum = new Date(setYear, setMonth, 0).getDate() //当前月有多少天
    let forNum = Math.ceil((startWeek + dayNum) / 7) * 7 //当前月跨越的天数（包括当前月天数周所涉及的上下月日期）
      //展开状态，需要渲染完整的月份
      for (let i = 0; i < forNum; i++) {
        const now2 = new Date(now)
        let obj = {};
        if (i>=startWeek && i<(dayNum+startWeek)) {
          now2.setDate(i - startWeek + 1)
          let dayStatus=this.matchDay({y:now2.getFullYear(),m:now2.getMonth()+1,d:now2.getDate()})
          obj = {
            day: now2.getDate(),
            month: now2.getMonth() + 1,
            year: now2.getFullYear(),
            dateString: this.formatTime(now2, "Y-M-D"),
            dateSecond:new Date(this.formatTime(now2, "Y-M-D")).getTime()
          };
          if (!util.isEmpty(dayStatus)&&dayStatus>0) {
            obj.count=dayStatus;
          }
        } else {
          obj = {}
        }
        dateList[i] = obj;
      }
    this.setData({
      dateList: dateList
    })
  },
  // 匹配日历-天
  matchDay(date){
    let count=0;
    if (!util.isObjEmpty(this.data.haveActDays)) {
      this.data.haveActDays.map(el => {
        let date1 = el.date.split('-');
        if (date.y==date1[0] && date.m==parseInt(date1[1])&&date.d==parseInt(date1[2])) {
          count=el.count;
        }
      });
    }
    return count;
  },
  //一天被点击时
  selectChange(e) {
    const year = e.currentTarget.dataset.year
    const month = e.currentTarget.dataset.month
    const day = e.currentTarget.dataset.day
    const dateString = e.currentTarget.dataset.dateString
    const selectDay = {
      year: year,
      month: month,
      day: day,
      dateString: dateString
    }
    if (this.data.selectDay.year == year && this.data.selectDay.month == month && this.data.selectDay.day == day) {
      return false;
    }else{
      this.getActiveDetail(dateString)
    }
    this.setData({selectDay})
  }
})