-- ---------------------------------------------------------------------------
-- POE.Multi Auth API — MySQL schema (Phase 28)
--
-- Chạy file này trong phpMyAdmin (cPanel) SAU KHI đã tạo database + user.
-- Chọn đúng database của bạn ở cột trái, mở tab "SQL", dán toàn bộ nội dung
-- bên dưới rồi bấm "Go".
--
-- Bảng: users, sessions, audit_logs
-- Charset: utf8mb4 (hỗ trợ đầy đủ Unicode).
-- ---------------------------------------------------------------------------


-- ---------------------------------------------------------------------------
-- 1) users — tài khoản + thông tin license
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `users` (
  `id`            BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `username`      VARCHAR(64)  NOT NULL,
  `email`         VARCHAR(190) NOT NULL,
  `password_hash` VARCHAR(255) NOT NULL,        -- bcrypt hash (bcryptjs, cost 12)
  `expires_at`    DATETIME     NOT NULL,        -- thời điểm hết hạn license (UTC)
  `is_active`     TINYINT(1)   NOT NULL DEFAULT 1,
  `created_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_users_username` (`username`),
  KEY `idx_users_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------------
-- 2) sessions — phiên đăng nhập (chỉ lưu HASH của token, không lưu token gốc)
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `sessions` (
  `id`         BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id`    BIGINT UNSIGNED NOT NULL,
  `token_hash` CHAR(64)     NOT NULL,           -- SHA-256 hex của session token
  `expires_at` DATETIME     NOT NULL,
  `ip_address` VARCHAR(45)  NULL,
  `user_agent` VARCHAR(255) NULL,
  `created_at` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_sessions_token` (`token_hash`),
  KEY `idx_sessions_user` (`user_id`),
  KEY `idx_sessions_expires` (`expires_at`),
  CONSTRAINT `fk_sessions_user`
    FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
    ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------------
-- 3) audit_logs — nhật ký sự kiện (login_ok, login_fail, validate, logout...)
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `audit_logs` (
  `id`         BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id`    BIGINT UNSIGNED NULL,            -- có thể NULL (vd: login sai username)
  `event`      VARCHAR(32)  NOT NULL,
  `ip_address` VARCHAR(45)  NULL,
  `notes`      VARCHAR(255) NULL,
  `created_at` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_audit_user` (`user_id`),
  KEY `idx_audit_event` (`event`),
  KEY `idx_audit_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------------------------
-- 4) Tài khoản test (TÙY CHỌN)
--
-- password_hash bên dưới là bcrypt của mật khẩu "Test1234!" (cost 12).
-- Bạn NÊN tự sinh hash riêng (xem hướng dẫn trong DEPLOY.md, mục "Tạo user test")
-- rồi thay thế chuỗi hash này trước khi chạy.
--
-- License hết hạn vào 2027-01-01 (UTC).
-- ---------------------------------------------------------------------------
-- INSERT INTO `users` (`username`, `email`, `password_hash`, `expires_at`, `is_active`)
-- VALUES ('testuser', 'test@example.com',
--         '$2a$12$REPLACE_WITH_YOUR_OWN_BCRYPT_HASH_VALUE_HERE_000000',
--         '2027-01-01 00:00:00', 1);
