-- Koleksiyonlar tablosu
CREATE TABLE IF NOT EXISTS collections (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  name TEXT NOT NULL,
  description TEXT,
  icon TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Kaydedilen yerler tablosu
CREATE TABLE IF NOT EXISTS bookmarks (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  place_id UUID REFERENCES places(id) ON DELETE CASCADE,
  collection_id UUID REFERENCES collections(id) ON DELETE SET NULL,
  notes TEXT,
  is_favorite BOOLEAN DEFAULT false,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(user_id, place_id)
);

-- RLS politikaları - Collections
ALTER TABLE collections ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Kullanıcılar kendi koleksiyonlarını görebilir"
  ON collections FOR SELECT
  USING (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar kendi koleksiyonlarını oluşturabilir"
  ON collections FOR INSERT
  WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar kendi koleksiyonlarını güncelleyebilir"
  ON collections FOR UPDATE
  USING (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar kendi koleksiyonlarını silebilir"
  ON collections FOR DELETE
  USING (auth.uid() = user_id);

-- RLS politikaları - Bookmarks
ALTER TABLE bookmarks ENABLE ROW LEVEL SECURITY;

CREATE POLICY "Kullanıcılar kendi kayıtlarını görebilir"
  ON bookmarks FOR SELECT
  USING (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar yer kaydedebilir"
  ON bookmarks FOR INSERT
  WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar kendi kayıtlarını güncelleyebilir"
  ON bookmarks FOR UPDATE
  USING (auth.uid() = user_id);

CREATE POLICY "Kullanıcılar kendi kayıtlarını silebilir"
  ON bookmarks FOR DELETE
  USING (auth.uid() = user_id);

-- Updated_at trigger
CREATE TRIGGER on_collection_updated
  BEFORE UPDATE ON collections
  FOR EACH ROW EXECUTE FUNCTION public.handle_updated_at();

-- Her kullanıcı için varsayılan koleksiyonlar oluştur (trigger)
CREATE OR REPLACE FUNCTION create_default_collections()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO collections (user_id, name, icon) VALUES
    (NEW.id, 'Tüm Kaydedilenler', 'bookmark'),
    (NEW.id, 'Favoriler', 'heart'),
    (NEW.id, 'Görmek İstediklerim', 'eye');
  RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER on_user_created_create_collections
  AFTER INSERT ON profiles
  FOR EACH ROW EXECUTE FUNCTION create_default_collections();
