-- =============================================================================
-- On Tour App — Fixtures
-- Mot de passe commun : password123
-- Usage : mysql -u root -p on_tour_app < bin/fixtures.sql
-- =============================================================================


-- -----------------------------------------------------------------------------
-- Nettoyage (ordre inverse des FK)
-- -----------------------------------------------------------------------------


-- -----------------------------------------------------------------------------
-- Table : users
-- -----------------------------------------------------------------------------

CREATE TABLE users (
    id           INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    email        VARCHAR(180)  NOT NULL,
    password     VARCHAR(255)  NOT NULL,
    firstName    VARCHAR(100)  NOT NULL,
    lastName     VARCHAR(100)  NOT NULL,
    isSuperAdmin TINYINT(1)    NOT NULL DEFAULT 0,
    isAdmin      TINYINT(1)    NOT NULL DEFAULT 0,
    createdAt    DATETIME      NOT NULL,
    updatedAt    DATETIME      DEFAULT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uq_users_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : structures
-- -----------------------------------------------------------------------------

CREATE TABLE structures (
    id          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    name        VARCHAR(255)  NOT NULL,
    slug        VARCHAR(255)  NOT NULL,
    description TEXT          DEFAULT NULL,
    createdAt   DATETIME      NOT NULL,
    updatedAt   DATETIME      DEFAULT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uq_structures_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : users_structures  (lie utilisateurs ↔ structures)
-- -----------------------------------------------------------------------------

CREATE TABLE users_structures (
    id           INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    user_id      INT UNSIGNED  NOT NULL,
    structure_id INT UNSIGNED  NOT NULL,
    role         VARCHAR(50)   NOT NULL DEFAULT 'member',
    joinedAt     DATETIME      NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_us_user      FOREIGN KEY (user_id)      REFERENCES users (id)      ON DELETE CASCADE,
    CONSTRAINT fk_us_structure FOREIGN KEY (structure_id) REFERENCES structures (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : tours  (regroupement de shows)
-- -----------------------------------------------------------------------------

CREATE TABLE tours (
    id          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    name        VARCHAR(255)  NOT NULL,
    description TEXT          DEFAULT NULL,
    startDate   DATE          DEFAULT NULL,
    endDate     DATE          DEFAULT NULL,
    status      VARCHAR(50)   NOT NULL DEFAULT 'planned',
    createdAt   DATETIME      NOT NULL,
    updatedAt   DATETIME      DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : shows  (événement atomique — concert, festival…)
-- -----------------------------------------------------------------------------

CREATE TABLE shows (
    id           INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    structure_id INT UNSIGNED  NOT NULL,
    tour_id      INT UNSIGNED  DEFAULT NULL,
    title        VARCHAR(255)  NOT NULL,
    date         DATETIME      DEFAULT NULL,
    venue        VARCHAR(255)  DEFAULT NULL,
    city         VARCHAR(255)  DEFAULT NULL,
    notes        TEXT          DEFAULT NULL,
    createdAt    DATETIME      NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_shows_structure FOREIGN KEY (structure_id) REFERENCES structures (id) ON DELETE CASCADE,
    CONSTRAINT fk_shows_tour      FOREIGN KEY (tour_id)      REFERENCES tours (id)      ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : teams  (regroupement d'utilisateurs — indépendant des tournées)
-- -----------------------------------------------------------------------------

CREATE TABLE teams (
    id           INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    name         VARCHAR(255)  NOT NULL,
    color        VARCHAR(7)    DEFAULT NULL,
    description  TEXT          DEFAULT NULL,
    structure_id INT UNSIGNED  DEFAULT NULL,
    createdAt    DATETIME      NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_teams_structure FOREIGN KEY (structure_id) REFERENCES structures (id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : show_teams  (lie shows ↔ équipes)
-- -----------------------------------------------------------------------------

CREATE TABLE show_teams (
    show_id INT UNSIGNED NOT NULL,
    team_id INT UNSIGNED NOT NULL,
    PRIMARY KEY (show_id, team_id),
    CONSTRAINT fk_st_show FOREIGN KEY (show_id) REFERENCES shows (id) ON DELETE CASCADE,
    CONSTRAINT fk_st_team FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- -----------------------------------------------------------------------------
-- Table : team_members  (lie utilisateurs ↔ équipes)
-- -----------------------------------------------------------------------------

CREATE TABLE team_members (
    id      INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    team_id INT UNSIGNED  NOT NULL,
    user_id INT UNSIGNED  NOT NULL,
    role    VARCHAR(255)  DEFAULT NULL,
    addedAt DATETIME      NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_tm_team FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE CASCADE,
    CONSTRAINT fk_tm_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- =============================================================================
-- Données de démo
-- =============================================================================

-- -----------------------------------------------------------------------------
-- Utilisateurs  (mot de passe : password123)
-- -----------------------------------------------------------------------------

INSERT INTO users (id, email, password, firstName, lastName, isSuperAdmin, isAdmin, createdAt) VALUES
(1, 'alice@ontour.fr',  '$2y$12$l/GO/oa6pYjmBBrHGyZAluaJ6kI9fXM2XCxG6WvMfO3hjFVgyU7TO', 'Alice',  'Dupont',   1, 1, '2024-01-10 09:00:00'),
(2, 'bob@ontour.fr',    '$2y$12$l/GO/oa6pYjmBBrHGyZAluaJ6kI9fXM2XCxG6WvMfO3hjFVgyU7TO', 'Bob',    'Martin',   0, 0, '2024-01-11 10:00:00'),
(3, 'chloe@ontour.fr',  '$2y$12$l/GO/oa6pYjmBBrHGyZAluaJ6kI9fXM2XCxG6WvMfO3hjFVgyU7TO', 'Chloé',  'Lemaire',  0, 0, '2024-01-12 11:00:00'),
(4, 'david@ontour.fr',  '$2y$12$l/GO/oa6pYjmBBrHGyZAluaJ6kI9fXM2XCxG6WvMfO3hjFVgyU7TO', 'David',  'Renard',   0, 0, '2024-01-13 12:00:00'),
(5, 'emma@ontour.fr',   '$2y$12$l/GO/oa6pYjmBBrHGyZAluaJ6kI9fXM2XCxG6WvMfO3hjFVgyU7TO', 'Emma',   'Rousseau', 0, 0, '2024-01-14 13:00:00');

-- -----------------------------------------------------------------------------
-- Structures  (organisations)
-- -----------------------------------------------------------------------------

INSERT INTO structures (id, name, slug, description, createdAt) VALUES
(1, 'Les Électrons Libres',    'les-electrons-libres',    'Groupe de rock alternatif en tournée depuis 2019.', '2024-01-15 09:00:00'),
(2, 'Collectif Scène Ouverte', 'collectif-scene-ouverte', 'Collectif de musiques actuelles — concerts et festivals.', '2024-01-16 09:00:00');

-- -----------------------------------------------------------------------------
-- Membres des structures  (utilisateurs liés à une structure)
-- -----------------------------------------------------------------------------

INSERT INTO users_structures (id, user_id, structure_id, role, joinedAt) VALUES
(1, 1, 1, 'admin',  '2024-01-15 09:00:00'),
(2, 2, 1, 'admin',  '2024-01-15 09:00:00'),
(3, 3, 1, 'member', '2024-01-16 10:00:00'),
(4, 4, 1, 'member', '2024-01-16 10:00:00'),
(5, 5, 1, 'member', '2024-01-17 10:00:00'),
(6, 2, 2, 'admin',  '2024-01-18 09:00:00'),
(7, 1, 2, 'member', '2024-01-18 09:00:00'),
(8, 3, 2, 'member', '2024-01-19 10:00:00');

-- -----------------------------------------------------------------------------
-- Tournées  (regroupements de shows — sans lien direct aux structures)
-- -----------------------------------------------------------------------------

INSERT INTO tours (id, name, description, startDate, endDate, status, createdAt) VALUES
(1, 'Tournée Printemps 2024',  '12 dates en France — salles de 500 à 2 000 places.', '2024-03-15', '2024-05-20', 'completed', '2024-01-20 09:00:00'),
(2, 'Festival Tour Été 2024',  'Participation à 8 festivals estivaux.',               '2024-06-01', '2024-08-31', 'completed', '2024-03-01 09:00:00'),
(3, 'Tournée Automne 2025',    'Tour européen — France, Belgique, Suisse.',           '2025-09-01', '2025-11-30', 'ongoing',   '2025-06-01 09:00:00'),
(4, 'Tournée Hiver 2026',      'Album release tour — 20 dates.',                      '2026-01-15', '2026-03-30', 'planned',   '2025-09-01 09:00:00'),
(5, 'Mini-Tour Bretagne 2024', 'Annulé suite à des problèmes logistiques.',           '2024-10-01', '2024-10-15', 'cancelled', '2024-08-01 09:00:00');

-- -----------------------------------------------------------------------------
-- Shows  (événements atomiques — appartiennent à une structure + tournée optionnelle)
-- -----------------------------------------------------------------------------

INSERT INTO shows (id, structure_id, tour_id, title, date, venue, city, notes, createdAt) VALUES
-- Tournée Printemps 2024 (structure 1)
(1,  1, 1, 'Paris — La Cigale',         '2024-03-15 20:30:00', 'La Cigale',          'Paris',     'Sold out',                          '2024-01-20 10:00:00'),
(2,  1, 1, 'Lyon — Le Transbordeur',    '2024-03-22 20:30:00', 'Le Transbordeur',    'Lyon',      NULL,                                '2024-01-20 10:00:00'),
(3,  1, 1, 'Bordeaux — Rock School',    '2024-04-05 20:00:00', 'Rock School Barbey', 'Bordeaux',  NULL,                                '2024-01-20 10:00:00'),
(4,  1, 1, 'Nantes — Le Stereolux',     '2024-04-19 20:30:00', 'Le Stereolux',       'Nantes',    'Report de date',                    '2024-01-20 10:00:00'),

-- Festival Tour Été 2024 (structure 1)
(5,  1, 2, 'Hellfest — Main Stage',     '2024-06-14 18:00:00', 'Main Stage',         'Clisson',   'Scène principale, 30 min de set',   '2024-03-01 10:00:00'),
(6,  1, 2, 'Vieilles Charrues',         '2024-07-20 21:00:00', 'Scène Glenmor',      'Carhaix',   NULL,                                '2024-03-01 10:00:00'),
(7,  1, 2, 'Francofolies La Rochelle',  '2024-07-12 22:00:00', 'Grande Scène',       'La Rochelle',NULL,                               '2024-03-01 10:00:00'),

-- Tournée Automne 2025 (structure 2)
(8,  2, 3, 'Bruxelles — Botanique',     '2025-09-12 20:30:00', 'Le Botanique',       'Bruxelles', NULL,                                '2025-06-01 10:00:00'),
(9,  2, 3, 'Genève — L\'Usine',         '2025-09-20 20:00:00', 'L\'Usine',           'Genève',    NULL,                                '2025-06-01 10:00:00'),
(10, 2, 3, 'Lausanne — Les Docks',      '2025-10-03 20:30:00', 'Les Docks',          'Lausanne',  NULL,                                '2025-06-01 10:00:00'),

-- Tournée Hiver 2026 (structure 1)
(11, 1, 4, 'Paris — L\'Olympia',        '2026-01-15 20:00:00', 'L\'Olympia',         'Paris',     'Release show du nouvel album',       '2025-09-01 10:00:00'),
(12, 1, 4, 'Strasbourg — La Laiterie',  '2026-02-06 20:30:00', 'La Laiterie',        'Strasbourg',NULL,                                '2025-09-01 10:00:00'),

-- Shows hors tournée (standalone)
(13, 1, NULL, 'Showcase Promo Paris',   '2024-11-08 19:00:00', 'FNAC Châtelet',      'Paris',     'Showcase acoustique promo album',   '2024-10-01 10:00:00'),
(14, 2, NULL, 'Soirée bénéfice Nantes', '2025-05-03 20:00:00', 'Le Lieu Unique',     'Nantes',    'Événement caritatif',               '2025-04-01 10:00:00');

-- -----------------------------------------------------------------------------
-- Équipes  (groupes d'utilisateurs — indépendants des tournées)
-- -----------------------------------------------------------------------------

INSERT INTO teams (id, name, color, description, structure_id, createdAt) VALUES
(1, 'Scène',      '#e74c3c', 'Artistes et musiciens sur scène.',              1, '2024-01-20 10:00:00'),
(2, 'Technique',  '#3498db', 'Son, lumière et régie.',                         1, '2024-01-20 10:00:00'),
(3, 'Logistique', '#2ecc71', 'Transport, hébergement et organisation.',        1, '2024-01-20 10:00:00'),
(4, 'Management', '#9b59b6', 'Direction artistique et attachée de presse.',   1, '2024-01-20 10:00:00');

-- -----------------------------------------------------------------------------
-- Membres des équipes
-- -----------------------------------------------------------------------------

-- -----------------------------------------------------------------------------
-- Équipes ↔ Shows
-- -----------------------------------------------------------------------------

INSERT INTO show_teams (show_id, team_id) VALUES
-- Scène (1) : Paris, Lyon, Hellfest
(1, 1), (2, 1), (5, 1),
-- Technique (2) : Paris, Lyon, Bordeaux, Hellfest
(1, 2), (2, 2), (3, 2), (5, 2),
-- Logistique (3) : tous les shows structure 1
(1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (11, 3), (12, 3), (13, 3),
-- Management (4) : Hellfest, Vieilles Charrues, Francofolies
(5, 4), (6, 4), (7, 4);

INSERT INTO team_members (id, team_id, user_id, role, addedAt) VALUES
-- Scène
(1,  1, 1, 'Chanteuse',              '2024-01-21 09:00:00'),
(2,  1, 2, 'Guitariste',             '2024-01-21 09:00:00'),
(3,  1, 3, 'Bassiste',               '2024-01-21 09:00:00'),
-- Technique
(4,  2, 4, 'Sonorisateur',           '2024-01-21 09:00:00'),
(5,  2, 5, 'Éclairagiste',           '2024-01-21 09:00:00'),
(6,  2, 2, 'Assistant son',          '2024-01-21 09:00:00'),
-- Logistique
(7,  3, 4, 'Chef logistique',        '2024-01-21 09:00:00'),
(8,  3, 5, 'Chauffeur',              '2024-01-21 09:00:00'),
-- Management
(9,  4, 1, 'Manager',                '2024-01-21 09:00:00'),
(10, 4, 3, 'Attachée de presse',     '2024-01-21 09:00:00');
