-- JSONB Elimination Phase 1 (CORRECTED)
-- Creates relational tables to replace JSONB columns

-- ============================================================================
-- 1. COASTER_STATS (Already created successfully)
-- ============================================================================
-- Table created in previous migration attempt

-- ============================================================================
-- 2. TECHNICAL_SPECIFICATIONS (Already created successfully)
-- ============================================================================
-- Table created in previous migration attempt

-- ============================================================================
-- 3. LIST_ITEMS (CORRECTED - Remove visibility reference)
-- ============================================================================
CREATE TABLE IF NOT EXISTS public.list_items (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  list_id UUID NOT NULL REFERENCES public.user_top_lists(id) ON DELETE CASCADE,
  entity_type TEXT NOT NULL CHECK (entity_type IN ('park', 'ride', 'coaster')),
  entity_id UUID NOT NULL,
  position INTEGER NOT NULL,
  notes TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(list_id, position),
  UNIQUE(list_id, entity_id)
);

CREATE INDEX IF NOT EXISTS idx_list_items_list ON public.list_items(list_id);
CREATE INDEX IF NOT EXISTS idx_list_items_entity ON public.list_items(entity_id, entity_type);

ALTER TABLE public.list_items ENABLE ROW LEVEL SECURITY;

-- RLS: Users can view list items if they own the list OR the list is findable by others
CREATE POLICY "Users view own list items"
  ON public.list_items FOR SELECT
  USING (EXISTS (
    SELECT 1 FROM public.user_top_lists utl
    WHERE utl.id = list_items.list_id
    AND utl.user_id = auth.uid()
  ));

-- RLS: Users can manage their own list items
CREATE POLICY "Users manage own list items"
  ON public.list_items FOR ALL
  USING (EXISTS (
    SELECT 1 FROM public.user_top_lists utl
    WHERE utl.id = list_items.list_id AND utl.user_id = auth.uid()
  ));