import moment from "moment";

export const useScheduleDate = (cycleType: Ref<string>, scheduleInfoMapByMonth: Ref<Record<string, any>>) => {
  const realDate = ref("");

  const updateRealDate = (date: string) => {
    realDate.value = date;
  }

  const dateRestStatusMap = computed(() => {
    return Object.keys(scheduleInfoMapByMonth.value)
      .reduce((acc, monthKey) => {
        const monthData = scheduleInfoMapByMonth.value[monthKey];
        const calendar = monthData.calendar;
        calendar.forEach((item: any) => {
          acc[item.date] = item.is_rest;
        })
        return acc;
      }, {} as any);
  });

  const dateList = computed(() => {
    let list = [];
    if (!realDate.value) return [];

    let instance = moment(realDate.value);
    if (cycleType.value === 'month') {
      // 鑾峰彇褰撴湀澶╂暟
      const dayCount = instance.daysInMonth();
      const startWeekIndex = instance.startOf('month').day();

      list = Array.from(Array(dayCount))
        .map((_, index) => {
          const fullDate = instance.format('YYYY-MM-DD'); 
          const isRest = dateRestStatusMap.value[fullDate];
          const result = {
            weekIndex: (startWeekIndex + index) % 7,
            fullDate,
            date: index + 1,
            isRest,
          };
          instance.add(1, 'day');
          return result;
        });

    } else {
      instance = instance.startOf('week');
      list = Array.from(Array(7))
        .map(() => {
          const fullDate = instance.format('YYYY-MM-DD'); 
          const isRest = dateRestStatusMap.value[fullDate];
          const result = {
            weekIndex: instance.day(),
            fullDate,
            date: instance.date(),
            isRest,
          };
          instance.add(1, 'day');
          return result;
        });
    }
    return list;
  });


  return {
    realDate,
    dateList,
    updateRealDate
  };
}