-- Erstelle Datenbank mit UTF8MB4-Charakterencoding
CREATE DATABASE IF NOT EXISTS NexusControl CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE NexusControl;

-- Tabelle für Teams
CREATE TABLE IF NOT EXISTS Teams (
    TeamID INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(255) NOT NULL,
    Siege INT,
    Unentschieden INT,
    Niederlage INT,
    Punkte INT,
    Profilbild VARCHAR(255),
    GesamtKarte INT,
    INDEX idx_name (Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Spiele
CREATE TABLE IF NOT EXISTS Spiel (
    SpielID INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(255) NOT NULL,
    INDEX idx_name (Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Maps
CREATE TABLE IF NOT EXISTS Map (
    MapID INT,
    Name VARCHAR(255) NOT NULL,
    SpielID INT,
    PRIMARY KEY (MapID, SpielID),
    FOREIGN KEY (SpielID) REFERENCES Spiel(SpielID) ON DELETE CASCADE,
    UNIQUE KEY idx_name (Name),
    INDEX idx_spielid (SpielID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Team_Spiel
CREATE TABLE IF NOT EXISTS Team_Spiel (
    TeamID INT,
    SpielID INT,
    HeimmapID INT,
    PRIMARY KEY (TeamID, SpielID),
    FOREIGN KEY (TeamID) REFERENCES Teams(TeamID) ON DELETE CASCADE,
    FOREIGN KEY (SpielID) REFERENCES Spiel(SpielID) ON DELETE CASCADE,
    FOREIGN KEY (HeimmapID) REFERENCES Map(MapID) ON DELETE SET NULL,
    INDEX idx_heimmap (HeimmapID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Spieler
CREATE TABLE IF NOT EXISTS Spieler (
    SpielerID INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(255) NOT NULL,
    Siege INT,
    Unentschieden INT,
    Niederlage INT,
    Punkte INT,
    Profilbild VARCHAR(255),
    GesamtKarten INT,
    INDEX idx_name (Name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Spieler_Spiel
CREATE TABLE IF NOT EXISTS Spieler_Spiel (
    SpielerID INT,
    SpielID INT,
    Heimmap INT,
    PRIMARY KEY (SpielerID, SpielID),
    FOREIGN KEY (SpielerID) REFERENCES Spieler(SpielerID) ON DELETE CASCADE,
    FOREIGN KEY (SpielID) REFERENCES Spiel(SpielID) ON DELETE CASCADE,
    FOREIGN KEY (Heimmap) REFERENCES Map(MapID) ON DELETE SET NULL,
    INDEX idx_heimmap (Heimmap)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für LigaspielBasis
CREATE TABLE IF NOT EXISTS LigaspielBasis (
    LigaspielID INT PRIMARY KEY AUTO_INCREMENT,
    SpielID INT,
    Spieltyp ENUM('Einzel', 'Team'),
    FOREIGN KEY (SpielID) REFERENCES Spiel(SpielID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Prüfer
CREATE TABLE IF NOT EXISTS Pruefer (
    PrueferID INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(255) NOT NULL,
    Benutzername VARCHAR(255) NOT NULL UNIQUE,
    PasswortHash VARCHAR(255) NOT NULL,
    INDEX idx_benutzername (Benutzername)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Ligaspiel_AR
CREATE TABLE IF NOT EXISTS Ligaspiel_AR (
    LigaspielID INT PRIMARY KEY,
    Spieler1ID INT,
    Spieler2ID INT,
    Team1ID INT,
    Team2ID INT,
    MapID INT,
    PrueferID INT,
    Datum DATETIME,
    Uhrzeit TIME,
    Ergebnis VARCHAR(255),
    Punkte1 INT,
    Punkte2 INT,
    Karten1 INT,
    Karten2 INT,
    Spieltag INT,
    Bericht TEXT,
    LetzteAenderung TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (LigaspielID) REFERENCES LigaspielBasis(LigaspielID) ON DELETE CASCADE,
    FOREIGN KEY (Spieler1ID) REFERENCES Spieler(SpielerID) ON DELETE SET NULL,
    FOREIGN KEY (Spieler2ID) REFERENCES Spieler(SpielerID) ON DELETE SET NULL,
    FOREIGN KEY (Team1ID) REFERENCES Teams(TeamID) ON DELETE SET NULL,
    FOREIGN KEY (Team2ID) REFERENCES Teams(TeamID) ON DELETE SET NULL,
    FOREIGN KEY (MapID) REFERENCES Map(MapID) ON DELETE SET NULL,
    FOREIGN KEY (PrueferID) REFERENCES Pruefer(PrueferID) ON DELETE SET NULL,
    INDEX idx_team1 (Team1ID),
    INDEX idx_team2 (Team2ID),
    INDEX idx_map (MapID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für Ligaspiel_AR_Log
CREATE TABLE IF NOT EXISTS Ligaspiel_AR_Log (
    AenderungsID INT PRIMARY KEY AUTO_INCREMENT,
    LigaspielID INT,
    PrueferID INT,
    Aenderungszeit TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    AlteDaten LONGTEXT,
    NeueDaten LONGTEXT,
    Kommentar TEXT,
    FOREIGN KEY (LigaspielID) REFERENCES Ligaspiel_AR(LigaspielID) ON DELETE CASCADE,
    FOREIGN KEY (PrueferID) REFERENCES Pruefer(PrueferID) ON DELETE SET NULL,
    INDEX idx_pruefer (PrueferID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
