import { useMemo } from 'react';
import { formatDate } from '@/utils';
import { getCategoryId, getScheduleDate, isBirthdaySchedule } from '@/utils/schedule';

/**
 * 스케줄 필터링 훅
 * @param {Array} schedules - 스케줄 배열
 * @param {object} options - 필터 옵션
 * @param {number[]} options.categoryIds - 선택된 카테고리 ID 배열
 * @param {string} options.selectedDate - 선택된 날짜 (YYYY-MM-DD)
 * @param {boolean} options.birthdayFirst - 생일 우선 정렬 여부
 * @returns {Array} 필터링된 스케줄 배열
 */
export function useScheduleFiltering(schedules, options = {}) {
  const {
    categoryIds = [],
    selectedDate = null,
    birthdayFirst = true,
  } = options;

  return useMemo(() => {
    if (!schedules || schedules.length === 0) return [];

    let result = schedules.filter((schedule) => {
      // 카테고리 필터
      if (categoryIds.length > 0) {
        const catId = getCategoryId(schedule);
        if (!categoryIds.includes(catId)) return false;
      }

      // 날짜 필터
      if (selectedDate) {
        const scheduleDate = getScheduleDate(schedule);
        if (scheduleDate !== selectedDate) return false;
      }

      return true;
    });

    // 생일 우선 정렬
    if (birthdayFirst) {
      result = [...result].sort((a, b) => {
        const aIsBirthday = isBirthdaySchedule(a);
        const bIsBirthday = isBirthdaySchedule(b);
        if (aIsBirthday && !bIsBirthday) return -1;
        if (!aIsBirthday && bIsBirthday) return 1;
        return 0;
      });
    }

    return result;
  }, [schedules, categoryIds, selectedDate, birthdayFirst]);
}

/**
 * 카테고리별 개수 계산 훅
 * @param {Array} schedules - 스케줄 배열
 * @returns {object} 카테고리 ID별 개수 객체
 */
export function useCategoryCounts(schedules) {
  return useMemo(() => {
    if (!schedules || schedules.length === 0) return {};

    const counts = {};
    for (const schedule of schedules) {
      const categoryId = getCategoryId(schedule);
      counts[categoryId] = (counts[categoryId] || 0) + 1;
    }
    return counts;
  }, [schedules]);
}
