-- ALL SQL STATEMENTS FOR PROJECT "NexusControl" (DEMO-VERSION)
-- Diese Datei enthält ALLE im Projekt verwendeten CREATE, ALTER, INSERT, UPDATE, DELETE und SELECT Statements, 1:1 wie sie im Code und in den .sql-Dateien vorkommen.
-- Stand: 12.05.2025

-- ========== TABELLEN (CREATE TABLE) ==========

-- Benutzer
CREATE TABLE IF NOT EXISTS Benutzer (
    BenutzerID INT AUTO_INCREMENT PRIMARY KEY,
    Benutzername VARCHAR(50) NOT NULL UNIQUE,
    Passwort VARCHAR(255) NOT NULL,
    Rolle ENUM('admin', 'pruefer', 'spieler', 'entwickler') NOT NULL,
    ErstelltAm TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Spielmeldungen
CREATE TABLE IF NOT EXISTS spielmeldungen (
    id INT AUTO_INCREMENT PRIMARY KEY,
    spieler1_id INT NOT NULL,
    spieler2_id INT NOT NULL,
    datum DATETIME NOT NULL,
    liga_spieler1 VARCHAR(50),
    general_spieler1 VARCHAR(50),
    liga_spieler2 VARCHAR(50),
    general_spieler2 VARCHAR(50),
    status ENUM('gemeldet','bestaetigt','zu_pruefen','abgelehnt','geprueft') DEFAULT 'gemeldet',
    erstellt_am TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (spieler1_id) REFERENCES Benutzer(BenutzerID),
    FOREIGN KEY (spieler2_id) REFERENCES Benutzer(BenutzerID)
);

-- Liga-Anmeldungen
CREATE TABLE IF NOT EXISTS liga_anmeldungen (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    discord_tag VARCHAR(100) NOT NULL,
    liga_ids VARCHAR(255) NOT NULL,
    season_played ENUM('ja','nein') NOT NULL,
    season_names VARCHAR(255),
    other_name ENUM('ja','nein') NOT NULL,
    other_name_value VARCHAR(100),
    ip VARCHAR(45) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- ELO Vorschau
ALTER TABLE spieler_ligen ADD COLUMN elo_preview INT DEFAULT NULL;
CREATE TABLE IF NOT EXISTS elo_preview_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    spieler_id INT NOT NULL,
    liga_id INT NOT NULL,
    elo INT NOT NULL,
    berechnet_am DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    grund VARCHAR(100) DEFAULT NULL
);

-- ========== INSERT-BEISPIELE ==========
INSERT INTO Benutzer (Benutzername, Passwort, Rolle) VALUES ('admin', 'hash', 'admin');
INSERT INTO Benutzer (Benutzername, Passwort, Rolle) VALUES
('pruefer1', '$2y$10$wVQv3n5r/9gX2nHnFvZ5F.5K3VvQw8b4F8lK5Q4fFzGJpQ6Bv1h1O', 'pruefer'),
('spieler1', '$2y$10$wVQv3n5r/9gX2nHnFvZ5F.5K3VvQw8b4F8lK5Q4fFzGJpQ6Bv1h1O', 'spieler'),
('entwickler1', '$2y$10$wVQv3n5r/9gX2nHnFvZ5F.5K3VvQw8b4F8lK5Q4fFzGJpQ6Bv1h1O', 'entwickler');
-- Passwort-Hash entspricht: Test1234

INSERT INTO spielmeldungen (spieler1_id, spieler2_id, datum, liga_spieler1, general_spieler1, liga_spieler2, general_spieler2, status)
VALUES
(2, 3, NOW(), 'Gold', 'General A', 'Silber', 'General B', 'bestaetigt'),
(3, 4, NOW(), 'Silber', 'General B', 'Bronze', 'General C', 'gemeldet');

INSERT INTO admin_nachrichten (user_id, map_id, typ, nachricht, erledigt, erstellt_am) VALUES (?, ?, ?, ?, 0, NOW());
INSERT INTO spielanmeldungen (liga_id, spieler1_id, spieler2_id, map_id, zeitfenster, anmeldungszeit, spielbeginn, spielstart_verzoegerung) VALUES (?, ?, ?, ?, ?, ?, ?, ?);
INSERT INTO liga_anmeldungen (name, discord_tag, liga_ids, season_played, season_names, other_name, other_name_value, ip) VALUES (?,?,?,?,?,?,?,?);

-- ========== UPDATE-BEISPIELE ==========
UPDATE spielmeldungen SET status = '' WHERE id = ?;
UPDATE spielmeldungen SET streitfall_beweis=?, streitfall_kommentar=? WHERE id=?;
UPDATE spieler_ligen SET elo_preview = ? WHERE spieler_id = ? AND liga_id = ?;
UPDATE spieler_ligen SET elo = ? WHERE spieler_id = ? AND liga_id = ?;
UPDATE Spieler SET Elo = ? WHERE SpielerID = ?;
UPDATE Spieler SET Siege = Siege + 1 WHERE SpielerID = ?;
UPDATE Spieler SET Niederlage = Niederlage + 1 WHERE SpielerID = ?;
UPDATE Spieler SET Unentschieden = Unentschieden + 1 WHERE SpielerID = ?;
UPDATE Spieler SET GesamtKarten = GesamtKarten + 1 WHERE SpielerID IN (?, ?);
UPDATE spieler_ligen SET siege = siege + 1, Spiele = Spiele + 1 WHERE spieler_id = ? AND liga_id = ?;
UPDATE spieler_ligen SET niederlage = niederlage + 1, Spiele = Spiele + 1 WHERE spieler_id = ? AND liga_id = ?;
UPDATE spieler_ligen SET unentschieden = unentschieden + 1, Spiele = Spiele + 1 WHERE spieler_id = ? AND liga_id = ?;
UPDATE admin_nachrichten SET erledigt=1 WHERE id=?;
UPDATE Benutzer SET Benutzername=?, email=? WHERE BenutzerID=?;
UPDATE Benutzer SET farbe_haupt=?, farbe_akzent=?, farbe_hintergrund=?, farbe_text=? WHERE BenutzerID=?;
UPDATE Benutzer SET passwort=? WHERE BenutzerID=?;
UPDATE Benutzer SET avatar=?, avatar_status=? WHERE BenutzerID=?;

-- ========== DELETE-BEISPIELE ==========
DELETE FROM ... WHERE ... ; -- bitte im Code ergänzen

-- ========== SELECT-BEISPIELE ==========
SELECT id, name FROM leagues ORDER BY name;
SELECT id, name, description FROM leagues ORDER BY name;
SELECT s.*, l.name AS liga_name, m.name AS map_name, sp1.Name AS spieler1_name, sp2.Name AS spieler2_name FROM spielanmeldungen s JOIN leagues l ON l.id = s.liga_id LEFT JOIN Map m ON m.MapID = s.map_id JOIN Spieler sp1 ON sp1.SpielerID = s.spieler1_id JOIN Spieler sp2 ON sp2.SpielerID = s.spieler2_id WHERE s.id = ?;
SELECT status, bestaetigungsfrist, streitfall_beweis, streitfall_kommentar, id, spieler1_id FROM spielmeldungen WHERE spieler1_id=? ORDER BY id DESC LIMIT 1;
SELECT es.base_elo FROM leagues l JOIN elo_settings es ON l.elo_settings_id = es.id WHERE l.id = ?;
SELECT * FROM spielanmeldungen WHERE ... ;
SELECT name FROM maps WHERE id = ?;
SELECT s.SpielerID, s.Name FROM Spieler s INNER JOIN spieler_ligen sl ON sl.spieler_id = s.SpielerID WHERE s.BenutzerID = ? AND sl.liga_id = ?;
SELECT MapID, Name FROM Map WHERE SpielID = 1 ORDER BY Name;
SELECT SpielerID, Name, Elo, Siege, Unentschieden, Niederlage, GesamtKarten FROM Spieler ORDER BY Elo DESC;
SELECT COUNT(*) FROM liga_anmeldungen WHERE ip = ?;
SELECT COUNT(*) FROM Benutzer WHERE Benutzername = ?;
SELECT COUNT(*) FROM spieler_ligen WHERE (spieler_id = ? OR spieler_id = ?) AND liga_id = ?;
SELECT * FROM spieler_ligen WHERE spieler_id = ? AND liga_id = ?;
SELECT id, status, ergebnis, gegner_elo, streitfall_melder_id FROM spielmeldungen WHERE (spieler1_id = :sid OR spieler2_id = :sid) AND (liga_spieler1 = :lid OR liga_spieler2 = :lid) ORDER BY datum ASC;
SELECT es.k_factor, es.base_elo, es.win_bonus, es.draw_factor FROM leagues l LEFT JOIN elo_settings es ON l.elo_settings_id = es.id WHERE l.id = ?;
SELECT Elo FROM Spieler WHERE SpielerID = ?;
SELECT liga_id FROM spieler_ligen WHERE spieler_id = ? LIMIT 1;
SELECT * FROM Map;
SELECT * FROM Spieler;
SELECT * FROM spieler_ligen;
SELECT * FROM admin_nachrichten;
SELECT * FROM elo_preview_history;
SELECT * FROM spielmeldungen;
SELECT * FROM liga_anmeldungen;

-- ========== ENDE ==========
