-- ============================================================
--  CineBook — Datenbankschema + Testdaten
--  Datenbank: pbt3h24akv_Kino
--  Erstellt: 2026-03-05
-- ============================================================

-- Tabellen in korrekter Reihenfolge erstellen (wegen FK-Abhängigkeiten)

-- 1. BENUTZER
CREATE TABLE IF NOT EXISTS Users (
    UserID       INT           NOT NULL AUTO_INCREMENT,
    Username     VARCHAR(60)   NOT NULL UNIQUE,
    Email        VARCHAR(120)  NOT NULL,
    PasswordHash VARCHAR(255)  NOT NULL,
    Role         ENUM('admin','customer') NOT NULL DEFAULT 'customer',
    IsActive     TINYINT(1)    NOT NULL DEFAULT 1,
    CreatedAt    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (UserID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. FILME
CREATE TABLE IF NOT EXISTS Movies (
    MovieID         INT           NOT NULL AUTO_INCREMENT,
    Title           VARCHAR(200)  NOT NULL,
    Genre           VARCHAR(60)   NOT NULL DEFAULT '',
    DurationMinutes INT           NOT NULL,
    Description     TEXT,
    AgeRating       VARCHAR(10)   NOT NULL DEFAULT 'FSK 0',
    IsActive        TINYINT(1)    NOT NULL DEFAULT 1,
    PRIMARY KEY (MovieID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. SÄLE
CREATE TABLE IF NOT EXISTS Halls (
    HallID   INT          NOT NULL AUTO_INCREMENT,
    Name     VARCHAR(60)  NOT NULL,
    Capacity INT          NOT NULL,
    IsActive TINYINT(1)   NOT NULL DEFAULT 1,
    PRIMARY KEY (HallID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. VORSTELLUNGEN
CREATE TABLE IF NOT EXISTS Screenings (
    ScreeningID  INT            NOT NULL AUTO_INCREMENT,
    MovieID      INT            NOT NULL,
    HallID       INT            NOT NULL,
    StartTime    DATETIME       NOT NULL,
    PricePerSeat DECIMAL(8,2)   NOT NULL,
    PRIMARY KEY (ScreeningID),
    FOREIGN KEY (MovieID) REFERENCES Movies(MovieID)  ON DELETE CASCADE,
    FOREIGN KEY (HallID)  REFERENCES Halls(HallID)    ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. BUCHUNGEN
CREATE TABLE IF NOT EXISTS Bookings (
    BookingID   INT            NOT NULL AUTO_INCREMENT,
    UserID      INT            NOT NULL,
    ScreeningID INT            NOT NULL,
    BookingDate DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP,
    SeatCount   INT            NOT NULL,
    TotalPrice  DECIMAL(10,2)  NOT NULL,
    Status      ENUM('confirmed','cancelled') NOT NULL DEFAULT 'confirmed',
    PRIMARY KEY (BookingID),
    FOREIGN KEY (UserID)      REFERENCES Users(UserID)        ON DELETE CASCADE,
    FOREIGN KEY (ScreeningID) REFERENCES Screenings(ScreeningID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ============================================================
--  TESTDATEN
-- ============================================================

-- Benutzer
-- Passwort für beide: 'admin123' (BCrypt-Hash)
INSERT INTO Users (Username, Email, PasswordHash, Role, IsActive) VALUES
('admin',   'admin@cinebook.de',   '$2a$11$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lh7y', 'admin',    1),
-- Passwort: 'kunde123'
('max',     'max@example.de',      '$2a$11$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'customer', 1),
('anna',    'anna@example.de',     '$2a$11$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'customer', 1);

-- Filme
INSERT INTO Movies (Title, Genre, DurationMinutes, Description, AgeRating, IsActive) VALUES
('Interstellar',        'Sci-Fi',     169, 'Ein Team von Astronauten reist durch ein Wurmloch auf der Suche nach einem neuen Zuhause für die Menschheit.', 'FSK 12', 1),
('The Dark Knight',     'Action',     152, 'Batman kämpft gegen den Joker, der Gotham City in Chaos und Angst stürzt.', 'FSK 12', 1),
('Inception',           'Thriller',   148, 'Ein Dieb dringt in die Träume anderer Menschen ein, um Geheimnisse zu stehlen.', 'FSK 12', 1),
('The Grand Budapest Hotel', 'Komödie', 99, 'Der legendäre Concierge eines berühmten europäischen Hotels und sein Lehrling erleben Abenteuer.', 'FSK 6', 1),
('Parasite',            'Drama',      132, 'Zwei Familien unterschiedlicher sozialer Klassen verstricken sich in einem brisanten Spiel.', 'FSK 16', 1),
('Dune: Part Two',      'Sci-Fi',     166, 'Paul Atreides vereint sich mit den Fremen und kämpft um Arrakis.', 'FSK 12', 1);

-- Säle
INSERT INTO Halls (Name, Capacity, IsActive) VALUES
('Saal 1 - Classic',  80, 1),
('Saal 2 - Premium',  50, 1),
('Saal 3 - IMAX',    120, 1),
('Saal 4 - 4DX',      40, 1);

-- Vorstellungen (alle in der Zukunft)
INSERT INTO Screenings (MovieID, HallID, StartTime, PricePerSeat) VALUES
(1, 3, DATE_ADD(NOW(), INTERVAL  1 DAY),   14.50),
(2, 1, DATE_ADD(NOW(), INTERVAL  1 DAY),   10.00),
(3, 2, DATE_ADD(NOW(), INTERVAL  2 DAY),   13.00),
(4, 1, DATE_ADD(NOW(), INTERVAL  2 DAY),    9.50),
(5, 4, DATE_ADD(NOW(), INTERVAL  3 DAY),   16.00),
(6, 3, DATE_ADD(NOW(), INTERVAL  3 DAY),   15.50),
(1, 2, DATE_ADD(NOW(), INTERVAL  5 DAY),   13.00),
(2, 4, DATE_ADD(NOW(), INTERVAL  7 DAY),   12.00);

-- Buchungen (Testdaten)
INSERT INTO Bookings (UserID, ScreeningID, BookingDate, SeatCount, TotalPrice, Status) VALUES
(2, 1, DATE_SUB(NOW(), INTERVAL 2 DAY), 2, 29.00, 'confirmed'),
(3, 2, DATE_SUB(NOW(), INTERVAL 1 DAY), 3, 30.00, 'confirmed'),
(2, 3, NOW(),                            1, 13.00, 'confirmed');
