/**
 * @file events.ts
 * @description Centraliza as operações de Data Fetching (CRUD) dos Eventos na Base de Dados Supabase.
 * Todas as funções garantem autenticação antes de comunicar, 
 * baseando-se nas Row Level Security (RLS) do Supabase para limitar acesso aos dados do utilizador.
 */
import { supabase } from './supabase'
import { getUser } from './auth'

/**
 * Interface que espelha o esquema da tabela 'events' no Supabase.
 */
export type EventRow = {
  id: number
  title: string
  description: string | null
  date: string
  user_id: string
}

/**
 * LISTAR eventos do utilizador autenticado
 * A consulta Supabase `select` obtém os eventos e o Supabase encarrega-se via RLS
 * de garantir que a query só retorna as linhas em que `user_id` corresponde ao UID da sessão.
 * @returns {Promise<EventRow[]>} Lista de eventos ordenados cronologicamente.
 */
export async function listEvents() {
  const user = await getUser()
  if (!user) throw new Error('Utilizador não autenticado')

  const { data, error } = await supabase
    .from('events')
    .select('id, title, description, date, user_id')
    .order('date', { ascending: true })

  if (error) throw error
  return (data ?? []) as EventRow[]
}

/**
 * CRIAR evento
 * user_id vem automaticamente de auth.uid()
 */
export async function createEvent(input: {
  title: string
  description?: string
  date: string
}) {
  const user = await getUser()
  if (!user) throw new Error('Utilizador não autenticado')

  const { data, error } = await supabase
    .from('events')
    .insert({
      title: input.title,
      description: input.description ?? null,
      date: input.date,
      // ❌ NÃO enviar user_id se tiver DEFAULT auth.uid()
    })
    .select('id, title, description, date, user_id')
    .single()

  if (error) throw error
  return data as EventRow
}
