-- Migration 0003: echte PayPal-Zahlungsabwicklung + realistischer Status "zahlungOffen".
--
-- Zwei Dinge ändern sich:
-- 1. Neue Spalte "paypal_order_id" — speichert die echte, von PayPal bestätigte Bestell-ID als
--    Zahlungsbeleg (siehe functions/api/paypal/capture-order.js).
-- 2. Der Status-Wertebereich bekommt "zahlungOffen" dazu (für Überweisung/Vorkasse, bevor das
--    Geld wirklich da ist) — vorher wurde JEDE Bestellung sofort als "bezahlt" markiert, auch
--    wenn noch gar nichts überwiesen war. Das war in der Phase-1-Testphase okay, ist aber ein
--    echtes Geschäftsrisiko (Ware könnte vor Zahlungseingang verschickt werden).
--
-- SQLite kann CHECK-Constraints nicht per ALTER TABLE ändern — deshalb wird die Tabelle nach dem
-- Standard-SQLite-Vorgehen neu aufgebaut: neue Tabelle mit korrektem Constraint anlegen, alle
-- bestehenden Zeilen 1:1 rüberkopieren (bestehende "bezahlt"-Bestellungen bleiben "bezahlt" —
-- die waren ja im alten Phase-1-System tatsächlich abgeschlossen), alte Tabelle löschen, neue
-- umbenennen.

PRAGMA foreign_keys=OFF;

CREATE TABLE orders_new (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  bestellnummer TEXT UNIQUE,
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL,
  status TEXT NOT NULL DEFAULT 'zahlungOffen'
    CHECK (status IN ('zahlungOffen', 'bezahlt', 'bearbeitung', 'versandVorbereitet', 'versendet', 'abgeschlossen', 'storniert')),
  kunde_name TEXT NOT NULL,
  kunde_email TEXT NOT NULL,
  land TEXT NOT NULL CHECK (land IN ('de', 'at', 'ch', 'lu')),
  strasse TEXT,
  plz TEXT,
  ort TEXT,
  zahlungsart TEXT,
  tracking TEXT,
  gutschein_code TEXT,
  paypal_order_id TEXT,
  zwischensumme REAL NOT NULL DEFAULT 0,
  versandkosten REAL NOT NULL DEFAULT 0,
  rabatt_gesamt REAL NOT NULL DEFAULT 0,
  summe REAL NOT NULL DEFAULT 0,
  treuebonus_verwendet INTEGER NOT NULL DEFAULT 0,
  abo_rabatt_verwendet INTEGER NOT NULL DEFAULT 0
);

INSERT INTO orders_new (
  id, bestellnummer, created_at, updated_at, status, kunde_name, kunde_email, land, strasse, plz,
  ort, zahlungsart, tracking, gutschein_code, paypal_order_id, zwischensumme, versandkosten,
  rabatt_gesamt, summe, treuebonus_verwendet, abo_rabatt_verwendet
)
SELECT
  id, bestellnummer, created_at, updated_at, status, kunde_name, kunde_email, land, strasse, plz,
  ort, zahlungsart, tracking, gutschein_code, NULL, zwischensumme, versandkosten,
  rabatt_gesamt, summe, treuebonus_verwendet, abo_rabatt_verwendet
FROM orders;

DROP TABLE orders;
ALTER TABLE orders_new RENAME TO orders;

CREATE INDEX IF NOT EXISTS idx_orders_status ON orders(status);
CREATE INDEX IF NOT EXISTS idx_orders_land ON orders(land);
CREATE INDEX IF NOT EXISTS idx_orders_created_at ON orders(created_at);
CREATE INDEX IF NOT EXISTS idx_orders_gutschein_email ON orders(gutschein_code, kunde_email);

PRAGMA foreign_keys=ON;
