# 🎙 Radio Sound Bar – Supabase Einrichtung

## Schritt 1: Kostenloses Supabase-Konto erstellen

1. Gehe zu: https://supabase.com
2. Klicke auf "Start your project" → mit GitHub oder E-Mail anmelden
3. Neues Projekt erstellen:
   - Name: `radio-sound-bar`
   - Passwort: (sicheres Passwort wählen und notieren!)
   - Region: `Europe (Frankfurt)` ← wichtig für Geschwindigkeit
4. Warte ~2 Minuten bis das Projekt bereit ist

---

## Schritt 2: Datenbank-Tabellen anlegen

1. Im Supabase-Dashboard: links auf **"SQL Editor"** klicken
2. Klicke auf **"New query"**
3. Kopiere den gesamten SQL-Code unten und führe ihn aus (Run / F5)

```sql
-- ============================================================
-- RADIO SOUND BAR – Datenbank Schema
-- ============================================================

-- BENUTZER (Admins & Moderatoren)
CREATE TABLE IF NOT EXISTS rsb_users (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  username TEXT UNIQUE NOT NULL,
  password_hash TEXT NOT NULL,
  display_name TEXT NOT NULL DEFAULT '',
  role TEXT NOT NULL DEFAULT 'moderator' CHECK (role IN ('admin','moderator')),
  active BOOLEAN DEFAULT true,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- NEWS
CREATE TABLE IF NOT EXISTS rsb_news (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  category TEXT DEFAULT 'News',
  emoji TEXT DEFAULT '📰',
  display_date TEXT DEFAULT '',
  author TEXT DEFAULT '',
  published BOOLEAN DEFAULT true,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- SENDEPLAN
CREATE TABLE IF NOT EXISTS rsb_schedule (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  time_slot TEXT NOT NULL,
  show_name TEXT NOT NULL,
  host TEXT DEFAULT '',
  day_type TEXT DEFAULT 'täglich',
  description TEXT DEFAULT '',
  active BOOLEAN DEFAULT true,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- CHARTS
CREATE TABLE IF NOT EXISTS rsb_charts (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  track TEXT NOT NULL,
  artist TEXT NOT NULL,
  cover_emoji TEXT DEFAULT '🎵',
  trend TEXT DEFAULT 'same' CHECK (trend IN ('up','down','same')),
  position INTEGER NOT NULL DEFAULT 1,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- WÜNSCHE & GRÜSSE
CREATE TABLE IF NOT EXISTS rsb_wishes (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  sender_name TEXT NOT NULL,
  wish_song TEXT DEFAULT '',
  greet_to TEXT DEFAULT '',
  message TEXT NOT NULL,
  approved BOOLEAN DEFAULT false,
  approved_by TEXT DEFAULT '',
  created_at TIMESTAMPTZ DEFAULT now()
);

-- WEBSITE EINSTELLUNGEN (Key-Value)
CREATE TABLE IF NOT EXISTS rsb_settings (
  key TEXT PRIMARY KEY,
  value TEXT NOT NULL,
  updated_at TIMESTAMPTZ DEFAULT now()
);

-- STREAM KONFIGURATION
CREATE TABLE IF NOT EXISTS rsb_stream (
  id INTEGER PRIMARY KEY DEFAULT 1,
  stream_url TEXT DEFAULT '',
  stream_name TEXT DEFAULT 'Radio Sound Bar – Live',
  genre TEXT DEFAULT 'Mixed',
  backup_url TEXT DEFAULT '',
  updated_at TIMESTAMPTZ DEFAULT now()
);

-- ============================================================
-- STANDARD-DATEN EINFÜGEN
-- ============================================================

-- Standard-Admin (Passwort: soundbar2025)
-- WICHTIG: Passwort nach dem ersten Login ändern!
INSERT INTO rsb_users (username, password_hash, display_name, role)
VALUES 
  ('admin', 'soundbar2025', 'Administrator', 'admin'),
  ('moderator', 'mod123', 'Moderator', 'moderator')
ON CONFLICT (username) DO NOTHING;

-- Stream-Eintrag initialisieren
INSERT INTO rsb_stream (id, stream_name) VALUES (1, 'Radio Sound Bar – Live')
ON CONFLICT (id) DO NOTHING;

-- Standard-Einstellungen
INSERT INTO rsb_settings (key, value) VALUES
  ('ticker', '🎵 Willkommen bei Radio Sound Bar! &nbsp;|&nbsp; 📱 Wunschsong? Scrolle nach unten! &nbsp;|&nbsp; 🎤 Immer live – immer gut!'),
  ('subtitle', 'Musik, News & mehr – 24/7 live. Für alle, die mehr wollen als Mainstream.'),
  ('impressum', 'Radio Sound Bar\nMusterstraße 1\n60311 Frankfurt am Main'),
  ('about', 'Radio Sound Bar ist dein digitales Zuhause für die beste Musik. Wir senden live, rund um die Uhr, mit Herz und Leidenschaft.'),
  ('email', 'kontakt@radiosoundbar.de')
ON CONFLICT (key) DO NOTHING;

-- Demo-Sendeplan
INSERT INTO rsb_schedule (time_slot, show_name, host, day_type) VALUES
  ('06:00', 'Guten Morgen Frankfurt', 'Morgen-Team', 'täglich'),
  ('09:00', 'Morgenshow', 'Sound Bar Team', 'täglich'),
  ('12:00', 'Mittagsbeat', 'DJ Marco', 'täglich'),
  ('15:00', 'Nachmittagsmix', 'Lena K.', 'täglich'),
  ('18:00', 'Feierabend-Session', 'Chris B.', 'täglich'),
  ('21:00', 'Late Night Vibes', 'Night-Crew', 'täglich');

-- Demo-Charts
INSERT INTO rsb_charts (track, artist, cover_emoji, trend, position) VALUES
  ('Flowers', 'Miley Cyrus', '💜', 'up', 1),
  ('Blinding Lights', 'The Weeknd', '🔥', 'same', 2),
  ('Levitating', 'Dua Lipa', '🌊', 'up', 3),
  ('As It Was', 'Harry Styles', '⚡', 'down', 4),
  ('Starboy', 'The Weeknd', '🎹', 'up', 5);

-- Demo-News
INSERT INTO rsb_news (title, body, category, emoji, display_date) VALUES
  ('Radio Sound Bar ist jetzt online!', 'Willkommen auf unserer neuen Homepage! Hier findet ihr News, Sendeplan, Wunsch & Gruß und vieles mehr.', 'Radio News', '📻', 'Heute'),
  ('Stadtfest Frankfurt – Wir übertragen live!', 'Beim diesjährigen Stadtfest Frankfurt überträgt Radio Sound Bar live vom Römerberg. Merkt euch den Termin!', 'Events', '🎪', 'Demnächst');

-- ============================================================
-- ROW LEVEL SECURITY (Öffentliche Leserechte, kein Auth-Zwang)
-- ============================================================

ALTER TABLE rsb_news ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_schedule ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_charts ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_wishes ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_settings ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_stream ENABLE ROW LEVEL SECURITY;
ALTER TABLE rsb_users ENABLE ROW LEVEL SECURITY;

-- Öffentlich lesen (News, Sendeplan, Charts, freigegebene Wünsche, Einstellungen, Stream)
CREATE POLICY "public_read_news" ON rsb_news FOR SELECT USING (published = true);
CREATE POLICY "public_read_schedule" ON rsb_schedule FOR SELECT USING (active = true);
CREATE POLICY "public_read_charts" ON rsb_charts FOR SELECT USING (true);
CREATE POLICY "public_read_approved_wishes" ON rsb_wishes FOR SELECT USING (approved = true);
CREATE POLICY "public_read_settings" ON rsb_settings FOR SELECT USING (true);
CREATE POLICY "public_read_stream" ON rsb_stream FOR SELECT USING (true);

-- Wünsche einsenden (alle dürfen INSERT)
CREATE POLICY "public_insert_wishes" ON rsb_wishes FOR INSERT WITH CHECK (true);

-- Alles schreiben/lesen für anon (wir nutzen eigenes Login, kein Supabase Auth)
CREATE POLICY "anon_all_news" ON rsb_news FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_schedule" ON rsb_schedule FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_charts" ON rsb_charts FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_wishes" ON rsb_wishes FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_settings" ON rsb_settings FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_stream" ON rsb_stream FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "anon_all_users" ON rsb_users FOR ALL USING (true) WITH CHECK (true);
```

---

## Schritt 3: API-Schlüssel kopieren

1. Im Supabase-Dashboard: links auf **"Project Settings"** (Zahnrad) klicken
2. Dann auf **"API"**
3. Kopiere:
   - **Project URL** → sieht aus wie `https://xyzxyzxyz.supabase.co`
   - **anon public key** → langer String beginnend mit `eyJ...`

4. Öffne die Datei **`config.js`** und trage beide Werte ein

---

## Schritt 4: Fertig! 🎉

Alle HTML-Dateien im Browser öffnen – sie lesen und schreiben jetzt direkt in die Supabase-Datenbank.

**Wichtige Hinweise:**
- Passwörter werden aktuell als Klartext gespeichert → für Produktion bitte bcrypt-Hashing einbauen (braucht Backend/Edge Functions)
- Der `anon` Key ist öffentlich sichtbar – das ist bei Supabase so vorgesehen, RLS schützt die Daten
- Kostenloses Supabase-Tier: 500MB DB, 2GB Bandwidth, unbegrenzte Anfragen

---

## Passwörter ändern (nach Einrichtung!)

Im Admin-Panel → Benutzer → eigenen Account bearbeiten → neues Passwort setzen.

Oder direkt im Supabase SQL Editor:
```sql
UPDATE rsb_users SET password_hash = 'neues_passwort' WHERE username = 'admin';
```
