-- =============================================================================
-- TEST DATA: 5 sample incidents for development and manual testing
-- Run AFTER all migrations have been applied.
-- Assumes at least one user exists in the users table.
-- Replace the user UUIDs with real values from your dev database.
-- =============================================================================

-- ---------------------------------------------------------------------------
-- Step 1: Insert two sample vehicles (if not already present)
-- Uses column names from 005_create_fahrzeuge.sql
-- ---------------------------------------------------------------------------
INSERT INTO fahrzeuge (id, bezeichnung, kurzname, amtliches_kennzeichen, baujahr, hersteller, typ_schluessel, besatzung_soll, status)
VALUES
  ('a1000000-0000-0000-0000-000000000001', 'HLF 20 - Hilfeleistungslöschgruppenfahrzeug', 'HLF TEST', 'WN-FW 1234', 2020, 'MAN / Rosenbauer', 'HLF 20/16', '1/8', 'einsatzbereit'),
  ('a1000000-0000-0000-0000-000000000002', 'TLF 3000 - Tanklöschfahrzeug', 'TLF TEST', 'WN-FW 5678', 2018, 'Mercedes-Benz Atego', 'TLF 3000', '1/5', 'einsatzbereit')
ON CONFLICT (id) DO NOTHING;

-- ---------------------------------------------------------------------------
-- Step 2: Helper — get the first active user ID (replace with real UUID in prod)
-- We use a DO block to make the script re-runnable and dev-environment agnostic.
-- ---------------------------------------------------------------------------
DO $$
DECLARE
  v_user_id     UUID;
  v_einsatz_id1 UUID := 'b1000000-0000-0000-0000-000000000001';
  v_einsatz_id2 UUID := 'b1000000-0000-0000-0000-000000000002';
  v_einsatz_id3 UUID := 'b1000000-0000-0000-0000-000000000003';
  v_einsatz_id4 UUID := 'b1000000-0000-0000-0000-000000000004';
  v_einsatz_id5 UUID := 'b1000000-0000-0000-0000-000000000005';
  v_fahrzeug1   UUID := 'a1000000-0000-0000-0000-000000000001';
  v_fahrzeug2   UUID := 'a1000000-0000-0000-0000-000000000002';
BEGIN
  SELECT id INTO v_user_id FROM users WHERE is_active = TRUE LIMIT 1;
  IF v_user_id IS NULL THEN
    RAISE NOTICE 'No active user found — skipping test data insert.';
    RETURN;
  END IF;

  -- -------------------------------------------------------------------------
  -- EINSATZ 1: Wohnungsbrand (Brand B3) — January — abgeschlossen
  -- -------------------------------------------------------------------------
  INSERT INTO einsaetze (
    id, einsatz_nr, alarm_time, ausrueck_time, ankunft_time, einrueck_time,
    einsatz_art, einsatz_stichwort, strasse, hausnummer, ort,
    bericht_kurz, bericht_text,
    einsatzleiter_id, alarmierung_art, status, created_by
  ) VALUES (
    v_einsatz_id1,
    generate_einsatz_nr('2026-01-14 14:32:00+01'::TIMESTAMPTZ),
    '2026-01-14 14:32:00+01',
    '2026-01-14 14:35:00+01',
    '2026-01-14 14:41:00+01',
    '2026-01-14 17:15:00+01',
    'Brand', 'B3',
    'Hauptstraße', '42', 'Berglen',
    'Wohnungsbrand im 2. OG, 1 Person gerettet',
    'Alarm um 14:32 Uhr durch ILS. Bei Ankunft stand das zweite Obergeschoss in Flammen. ' ||
    'Eine Person wurde über die Drehleiter gerettet und dem Rettungsdienst übergeben. ' ||
    'Brandbekämpfung mit zwei C-Rohren. Nachlöscharbeiten bis 17:00 Uhr.',
    v_user_id, 'ILS', 'abgeschlossen', v_user_id
  ) ON CONFLICT (id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- EINSATZ 2: Verkehrsunfall (THL 2) — Februar — abgeschlossen
  -- -------------------------------------------------------------------------
  INSERT INTO einsaetze (
    id, einsatz_nr, alarm_time, ausrueck_time, ankunft_time, einrueck_time,
    einsatz_art, einsatz_stichwort, strasse, hausnummer, ort,
    bericht_kurz, bericht_text,
    einsatzleiter_id, alarmierung_art, status, created_by
  ) VALUES (
    v_einsatz_id2,
    generate_einsatz_nr('2026-02-03 08:17:00+01'::TIMESTAMPTZ),
    '2026-02-03 08:17:00+01',
    '2026-02-03 08:20:00+01',
    '2026-02-03 08:26:00+01',
    '2026-02-03 10:45:00+01',
    'THL', 'THL 2',
    'Landesstraße 1115', NULL, 'Rudersberg',
    'Verkehrsunfall mit eingeklemmter Person, PKW gegen Baum',
    'PKW frontal gegen Baum. Fahrer eingeklemmt, Beifahrerin konnte selbstständig aussteigen. ' ||
    'Technische Rettung mit Spreizer und Schere. Person nach ca. 25 Minuten befreit. ' ||
    'Übergabe an den Rettungsdienst und Hubschrauber.',
    v_user_id, 'ILS', 'abgeschlossen', v_user_id
  ) ON CONFLICT (id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- EINSATZ 3: Brandmeldeanlage (BMA) — März — abgeschlossen (Fehlalarm)
  -- -------------------------------------------------------------------------
  INSERT INTO einsaetze (
    id, einsatz_nr, alarm_time, ausrueck_time, ankunft_time, einrueck_time,
    einsatz_art, einsatz_stichwort, strasse, hausnummer, ort,
    bericht_kurz,
    einsatzleiter_id, alarmierung_art, status, created_by
  ) VALUES (
    v_einsatz_id3,
    generate_einsatz_nr('2026-03-21 11:05:00+01'::TIMESTAMPTZ),
    '2026-03-21 11:05:00+01',
    '2026-03-21 11:08:00+01',
    '2026-03-21 11:12:00+01',
    '2026-03-21 11:35:00+01',
    'BMA', NULL,
    'Gewerbepark Rems', '7', 'Weinstadt',
    'BMA ausgelöst durch Staubentwicklung bei Bauarbeiten, kein Feuer',
    v_user_id, 'ILS', 'abgeschlossen', v_user_id
  ) ON CONFLICT (id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- EINSATZ 4: Ölspur (Hilfeleistung) — März — abgeschlossen
  -- -------------------------------------------------------------------------
  INSERT INTO einsaetze (
    id, einsatz_nr, alarm_time, ausrueck_time, ankunft_time, einrueck_time,
    einsatz_art, einsatz_stichwort, strasse, hausnummer, ort,
    bericht_kurz,
    einsatzleiter_id, alarmierung_art, status, created_by
  ) VALUES (
    v_einsatz_id4,
    generate_einsatz_nr('2026-03-28 16:45:00+01'::TIMESTAMPTZ),
    '2026-03-28 16:45:00+01',
    '2026-03-28 16:49:00+01',
    '2026-03-28 16:54:00+01',
    '2026-03-28 18:20:00+01',
    'Hilfeleistung', NULL,
    'Ortsdurchfahrt B29', NULL, 'Schorndorf',
    'Ölspur ca. 600m, LKW verlor Hydraulikflüssigkeit, Reinigung mit Ölbindemittel',
    v_user_id, 'ILS', 'abgeschlossen', v_user_id
  ) ON CONFLICT (id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- EINSATZ 5: Flächenbrand (Brand B2) — aktiv (noch laufend heute)
  -- -------------------------------------------------------------------------
  INSERT INTO einsaetze (
    id, einsatz_nr, alarm_time, ausrueck_time, ankunft_time,
    einsatz_art, einsatz_stichwort, strasse, hausnummer, ort,
    bericht_kurz,
    einsatzleiter_id, alarmierung_art, status, created_by
  ) VALUES (
    v_einsatz_id5,
    generate_einsatz_nr(NOW()),
    NOW() - INTERVAL '45 minutes',
    NOW() - INTERVAL '42 minutes',
    NOW() - INTERVAL '37 minutes',
    'Brand', 'B2',
    'Waldweg', NULL, 'Alfdorf',
    'Flächenbrand ca. 0,5 ha Unterholz, Wasserversorgung über Pendelverkehr',
    v_user_id, 'ILS', 'aktiv', v_user_id
  ) ON CONFLICT (id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- VEHICLES — assign to incidents
  -- -------------------------------------------------------------------------
  INSERT INTO einsatz_fahrzeuge (einsatz_id, fahrzeug_id, ausrueck_time, einrueck_time)
  VALUES
    (v_einsatz_id1, v_fahrzeug1, '2026-01-14 14:35:00+01', '2026-01-14 17:15:00+01'),
    (v_einsatz_id1, v_fahrzeug2, '2026-01-14 14:36:00+01', '2026-01-14 17:10:00+01'),
    (v_einsatz_id2, v_fahrzeug1, '2026-02-03 08:20:00+01', '2026-02-03 10:45:00+01'),
    (v_einsatz_id4, v_fahrzeug1, '2026-03-28 16:49:00+01', '2026-03-28 18:20:00+01'),
    (v_einsatz_id5, v_fahrzeug1, NOW() - INTERVAL '42 minutes', NULL),
    (v_einsatz_id5, v_fahrzeug2, NOW() - INTERVAL '40 minutes', NULL)
  ON CONFLICT (einsatz_id, fahrzeug_id) DO NOTHING;

  -- -------------------------------------------------------------------------
  -- PERSONNEL — assign the single test user to each incident
  -- -------------------------------------------------------------------------
  INSERT INTO einsatz_personal (einsatz_id, user_id, funktion, alarm_time, ankunft_time)
  VALUES
    (v_einsatz_id1, v_user_id, 'Einsatzleiter',  '2026-01-14 14:32:00+01', '2026-01-14 14:41:00+01'),
    (v_einsatz_id2, v_user_id, 'Gruppenführer',  '2026-02-03 08:17:00+01', '2026-02-03 08:26:00+01'),
    (v_einsatz_id3, v_user_id, 'Einsatzleiter',  '2026-03-21 11:05:00+01', '2026-03-21 11:12:00+01'),
    (v_einsatz_id4, v_user_id, 'Maschinist',     '2026-03-28 16:45:00+01', '2026-03-28 16:54:00+01'),
    (v_einsatz_id5, v_user_id, 'Einsatzleiter',  NOW() - INTERVAL '45 minutes', NOW() - INTERVAL '37 minutes')
  ON CONFLICT (einsatz_id, user_id) DO NOTHING;

  RAISE NOTICE 'Test data inserted successfully for user %', v_user_id;
END $$;

-- ---------------------------------------------------------------------------
-- Refresh the materialized view after data load
-- ---------------------------------------------------------------------------
REFRESH MATERIALIZED VIEW einsatz_statistik;

-- ---------------------------------------------------------------------------
-- Verify: quick sanity check
-- ---------------------------------------------------------------------------
SELECT
  e.einsatz_nr,
  e.einsatz_art,
  TO_CHAR(e.alarm_time AT TIME ZONE 'Europe/Berlin', 'DD.MM.YYYY HH24:MI') AS alarm_de,
  e.ort,
  e.status,
  COUNT(ep.user_id)     AS kräfte,
  COUNT(ef.fahrzeug_id) AS fahrzeuge
FROM einsaetze e
LEFT JOIN einsatz_personal  ep ON ep.einsatz_id = e.id
LEFT JOIN einsatz_fahrzeuge ef ON ef.einsatz_id = e.id
GROUP BY e.id, e.einsatz_nr, e.einsatz_art, e.alarm_time, e.ort, e.status
ORDER BY e.alarm_time DESC;
