import { useMemo } from 'react';

import {
  type ScheduleStatuses,
  useCachedSchedules,
} from 'loot-core/client/data-hooks/schedules';
import { type ScheduleEntity } from 'loot-core/types/models';

export function usePreviewTransactions() {
  const scheduleData = useCachedSchedules();

  return useMemo(() => {
    if (!scheduleData) {
      return [];
    }

    const schedules =
      scheduleData.schedules.filter(s =>
        isForPreview(s, scheduleData.statuses),
      ) || [];

    return schedules.map(schedule => ({
      id: 'preview/' + schedule.id,
      payee: schedule._payee,
      account: schedule._account,
      amount: schedule._amount,
      date: schedule.next_date,
      notes: scheduleData.statuses.get(schedule.id),
      schedule: schedule.id,
    }));
  }, [scheduleData]);
}

function isForPreview(schedule: ScheduleEntity, statuses: ScheduleStatuses) {
  const status = statuses.get(schedule.id);
  return (
    !schedule.completed &&
    (status === 'due' || status === 'upcoming' || status === 'missed')
  );
}