-- ============================================================
-- Migration : 2026_04_18_auth_users.sql
-- Projet    : Comptabilité AEC CONSEILS
-- Objet     : Table users, rôles, sessions sécurisées
-- ============================================================

USE `aec_compta`;

-- ── Table users ───────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `aec_compta_users` (
    `id`               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `nom`              VARCHAR(100) NOT NULL,
    `prenom`           VARCHAR(100) NOT NULL,
    `email`            VARCHAR(200) NOT NULL UNIQUE,
    `password_hash`    VARCHAR(255) NOT NULL   COMMENT 'bcrypt hash',
    `role`             ENUM('admin','lecture') NOT NULL DEFAULT 'lecture',
    `actif`            TINYINT(1) DEFAULT 1,
    `sso_token`        VARCHAR(64) DEFAULT NULL COMMENT 'Token SSO partagé CRM ↔ Compta',
    `sso_token_expiry` DATETIME   DEFAULT NULL,
    `tentatives_echec` TINYINT UNSIGNED DEFAULT 0,
    `bloque_jusqu_au`  DATETIME DEFAULT NULL,
    `derniere_connexion` DATETIME DEFAULT NULL,
    `created_at`       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at`       TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_user_email`     (`email`),
    INDEX `idx_user_sso_token` (`sso_token`)
) ENGINE=InnoDB COMMENT='Utilisateurs de la comptabilité';

-- ── Utilisateur admin initial ─────────────────────────────────
-- Mot de passe : AecCompta2026! (à changer en production)
INSERT INTO `aec_compta_users` (`nom`, `prenom`, `email`, `password_hash`, `role`, `actif`)
VALUES (
    'LEBRETON',
    'Guillaume',
    'guillaume@aecconseils.fr',
    '$2y$12$9X5qTzWyLfJpMkNvHdPuXOMkV.9zQpGaRJl1yiY8pHmRDnQFZ7wVe',
    'admin',
    1
)
ON DUPLICATE KEY UPDATE role = 'admin';

-- ── Utilisateur lecture seule (expert-comptable) ─────────────
INSERT INTO `aec_compta_users` (`nom`, `prenom`, `email`, `password_hash`, `role`, `actif`)
VALUES (
    'EXPERT',
    'Comptable',
    'compta@fiducial.fr',
    '$2y$12$Rd7mKjNpQsVuTwXyZaAbCOzLxWvHgFiEjDkMnBpRqStUvWxYz1234',
    'lecture',
    1
)
ON DUPLICATE KEY UPDATE role = 'lecture';

-- ── Sessions actives ──────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `aec_compta_sessions_actives` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id`       INT UNSIGNED NOT NULL,
    `session_id`    VARCHAR(128) NOT NULL UNIQUE,
    `ip_address`    VARCHAR(45)  DEFAULT NULL,
    `user_agent`    VARCHAR(500) DEFAULT NULL,
    `created_at`    TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
    `last_seen`     TIMESTAMP    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `expiry`        DATETIME     NOT NULL,
    FOREIGN KEY (`user_id`) REFERENCES `aec_compta_users`(`id`) ON DELETE CASCADE,
    INDEX `idx_session_id`   (`session_id`),
    INDEX `idx_session_user` (`user_id`)
) ENGINE=InnoDB COMMENT='Sessions actives (permet invalidation côté serveur)';
