-- Migration für AR Classic Ligen
-- Erstellt die notwendigen Tabellen für das AR Classic Liga-System

-- Tabelle für die AR Classic Ligen
CREATE TABLE IF NOT EXISTS ar_classic_ligen (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL COMMENT 'Name der Liga (z.B. "1. Liga")',
    min_elo INT NOT NULL COMMENT 'Mindest-ELO für diese Liga',
    max_elo INT NOT NULL COMMENT 'Maximal-ELO für diese Liga',
    liga_stufe INT NOT NULL COMMENT 'Numerische Stufe der Liga (1 = höchste Liga)',
    erstellt_am TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_elo_range (min_elo, max_elo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für die Spieler in den AR Classic Ligen
CREATE TABLE IF NOT EXISTS ar_classic_spieler (
    id INT AUTO_INCREMENT PRIMARY KEY,
    spieler_id INT NOT NULL COMMENT 'Referenz auf den Spieler in der Spieler-Tabelle',
    aktuelle_liga_id INT COMMENT 'Aktuelle Liga des Spielers',
    aktueller_elo INT NOT NULL COMMENT 'Aktueller ELO-Wert des Spielers',
    zuletzt_aktualisiert TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (spieler_id) REFERENCES Spieler(SpielerID) ON DELETE CASCADE,
    FOREIGN KEY (aktuelle_liga_id) REFERENCES ar_classic_ligen(id) ON DELETE SET NULL,
    UNIQUE KEY unique_spieler (spieler_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabelle für die Auf- und Abstiegs-Historie
CREATE TABLE IF NOT EXISTS ar_classic_historie (
    id INT AUTO_INCREMENT PRIMARY KEY,
    spieler_id INT NOT NULL,
    von_liga_id INT,
    zu_liga_id INT,
    elo_bei_aenderung INT NOT NULL,
    aenderungs_datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (spieler_id) REFERENCES Spieler(SpielerID) ON DELETE CASCADE,
    FOREIGN KEY (von_liga_id) REFERENCES ar_classic_ligen(id) ON DELETE SET NULL,
    FOREIGN KEY (zu_liga_id) REFERENCES ar_classic_ligen(id) ON DELETE SET NULL,
    INDEX idx_aenderungs_datum (aenderungs_datum)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Spalte für den Liga-Typ zur bestehenden Tabelle 'leagues' hinzufügen
ALTER TABLE leagues 
ADD COLUMN IF NOT EXISTS liga_typ VARCHAR(50) DEFAULT 'normal' COMMENT 'Typ der Liga (normal, classic, quali, etc.)';

-- Initiale AR Classic Ligen erstellen (1. Liga bis 6. Liga)
INSERT IGNORE INTO ar_classic_ligen (name, min_elo, max_elo, liga_stufe) VALUES
('1. Liga', 1800, 9999, 1),
('2. Liga', 1600, 1799, 2),
('3. Liga', 1400, 1599, 3),
('4. Liga', 1200, 1399, 4),
('5. Liga', 1000, 1199, 5),
('6. Liga', 0, 999, 6);

-- Index für bessere Performance bei Abfragen
CREATE INDEX IF NOT EXISTS idx_ar_classic_spieler_elo ON ar_classic_spieler(aktueller_elo);
CREATE INDEX IF NOT EXISTS idx_ar_classic_historie_spieler ON ar_classic_historie(spieler_id, aenderungs_datum);

-- Protokollierung der Migration
INSERT INTO migrations (migration_name, executed_at) 
VALUES ('migration_ar_classic_leagues', NOW());
