import { computed } from 'vue'
import { useAsyncState } from '@vueuse/core'
import type { Event } from '@/lib/types/event'
import { fetchEvents } from '@/lib/api/events'

export function useEvents() {
  const { state: events, isLoading, error: asyncError, execute: refresh } = useAsyncState(
    fetchEvents,
    [] as Event[],
    {
      immediate: true,
      resetOnExecute: false,
    }
  )

  const error = computed(() => {
    if (asyncError.value) {
      return {
        message: asyncError.value instanceof Error
          ? asyncError.value.message
          : 'An error occurred while fetching events'
      }
    }
    return null
  })

  const sortedEvents = computed(() => {
    return [...events.value].sort((a, b) =>
      new Date(b.time).getTime() - new Date(a.time).getTime()
    )
  })

  const upcomingEvents = computed(() => {
    const now = new Date()
    return sortedEvents.value.filter(event =>
      new Date(event.event_start_date) > now
    )
  })

  const pastEvents = computed(() => {
    const now = new Date()
    return sortedEvents.value.filter(event =>
      new Date(event.event_end_date) < now
    )
  })

  return {
    events: sortedEvents,
    upcomingEvents,
    pastEvents,
    isLoading,
    error,
    refresh,
  }
} 
