-- ==============================================
-- BODYCAM STREAMS TABLE
-- ==============================================
-- Tabela do przechowywania danych live streamów body cam z FiveM
-- Używana przez API endpoints: /api/bodycam/update, /api/bodycam/active-officers

CREATE TABLE IF NOT EXISTS bodycam_streams (
  id INT AUTO_INCREMENT PRIMARY KEY,
  
  -- Identyfikatory gracza
  identifier VARCHAR(100) UNIQUE NOT NULL COMMENT 'Unikalny identyfikator gracza (steam/license)',
  player_id INT NOT NULL COMMENT 'ID gracza na serwerze FiveM',
  
  -- Dane oficera
  officer_name VARCHAR(100) NOT NULL COMMENT 'Imię i nazwisko oficera',
  badge_number VARCHAR(20) COMMENT 'Numer odznaki',
  job VARCHAR(50) COMMENT 'Praca/frakcja (police, sheriff, lspd)',
  
  -- Lokalizacja
  location_x FLOAT COMMENT 'Współrzędna X w grze',
  location_y FLOAT COMMENT 'Współrzędna Y w grze',
  location_z FLOAT COMMENT 'Współrzędna Z w grze',
  street VARCHAR(255) COMMENT 'Nazwa ulicy',
  zone VARCHAR(255) COMMENT 'Nazwa dzielnicy',
  
  -- Status oficera
  health INT DEFAULT 200 COMMENT 'Zdrowie gracza (max 200)',
  armor INT DEFAULT 0 COMMENT 'Kamizelka (max 100)',
  weapon VARCHAR(100) COMMENT 'Aktualnie trzymana broń',
  in_vehicle TINYINT(1) DEFAULT 0 COMMENT 'Czy w pojeździe (0=nie, 1=tak)',
  
  -- Status streamu
  is_live TINYINT(1) DEFAULT 1 COMMENT 'Czy stream jest aktywny (0=nie, 1=tak)',
  last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Ostatnia aktualizacja danych',
  
  -- Indeksy dla szybkich zapytań
  INDEX idx_live (is_live),
  INDEX idx_identifier (identifier),
  INDEX idx_last_update (last_update),
  INDEX idx_officer (officer_name),
  INDEX idx_badge (badge_number)
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Przechowuje dane live streamów body cam z FiveM';

-- ==============================================
-- PRZYKŁADOWE DANE (OPCJONALNIE)
-- ==============================================
-- Możesz odkomentować poniższe INSERT do testowania bez FiveM

/*
INSERT INTO bodycam_streams 
(identifier, player_id, officer_name, badge_number, job, location_x, location_y, location_z, 
 street, zone, health, armor, weapon, in_vehicle, is_live, last_update)
VALUES 
('steam:110000112345678', 1, 'John Reed', '#1247', 'police', -268.53, -957.14, 31.22, 
 'Mission Row', 'Pillbox Hill', 200, 100, 'WEAPON_PISTOL', 0, 1, NOW()),
 
('steam:110000123456789', 2, 'Maria Sanchez', '#1156', 'police', 425.13, -979.55, 30.71,
 'Vinewood Blvd', 'Vinewood', 185, 75, 'WEAPON_CARBINERIFLE', 1, 1, NOW()),
 
('steam:110000134567890', 3, 'Kevin Williams', '#1089', 'sheriff', 1853.24, 3686.93, 34.27,
 'Sandy Shores', 'Grand Senora Desert', 200, 50, 'WEAPON_PISTOL', 0, 1, NOW()),
 
('steam:110000145678901', 4, 'Tom Davis', '#1334', 'police', -1096.72, -834.59, 19.00,
 'Vespucci Beach', 'Del Perro', 150, 0, 'Unarmed', 0, 0, NOW());
*/

-- ==============================================
-- CLEANUP: Usuń nieaktywne streamy starsze niż 1 godzinę
-- ==============================================
-- Możesz uruchomić to jako CRON job lub scheduled event

/*
DELETE FROM bodycam_streams 
WHERE is_live = 0 
  AND last_update < DATE_SUB(NOW(), INTERVAL 1 HOUR);
*/

-- ==============================================
-- HELPFUL QUERIES
-- ==============================================

-- Pokaż wszystkie aktywne streamy
-- SELECT * FROM bodycam_streams WHERE is_live = 1 ORDER BY last_update DESC;

-- Pokaż streamy z ostatnich 30 sekund
-- SELECT * FROM bodycam_streams WHERE last_update > DATE_SUB(NOW(), INTERVAL 30 SECOND);

-- Zlicz aktywne streamy
-- SELECT COUNT(*) as active_streams FROM bodycam_streams WHERE is_live = 1;

-- Pokaż historię streamów oficera
-- SELECT * FROM bodycam_streams WHERE officer_name = 'John Reed' ORDER BY last_update DESC;
