-- =============================================================================
-- Migración:    0007_create_password_resets_table
-- Sprint:       1.1 — auth + RBAC + audit
-- Tabla:        password_resets
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: 0001 (users).
--
-- Descripción:
--   Tokens de recuperación de contraseña. La feature "Olvidé mi
--   contraseña" se implementa en Sprint 2.x; en Sprint 1.1 la tabla
--   se crea para tener la infra lista (mesa servida).
--
-- Notas:
--   - token_hash: hash del token (NUNCA se guarda el token en claro,
--     mismo principio que password_hash para users).
--   - expira_en: típicamente 1h después de creado_en.
--   - usado_en: una vez consumido el token, se marca y no se reusa.
--   - ON DELETE CASCADE en user_id: al borrar un user se limpian
--     sus tokens pendientes. Excepción documentada en SCHEMA_SISTEMA.md.
-- =============================================================================

CREATE TABLE password_resets (
    id          BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                COMMENT 'PK auto-incremental.',
    user_id     BIGINT UNSIGNED NOT NULL
                COMMENT 'FK → users.id (CASCADE). User al que pertenece el token.',
    token_hash  VARCHAR(255)    NOT NULL
                COMMENT 'Hash del token (Argon2id o SHA-256). NUNCA guardar el token en claro.',
    creado_en   DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                COMMENT 'UTC de creación del token. Inmutable.',
    expira_en   DATETIME        NOT NULL
                COMMENT 'UTC hasta el cual el token es válido. Típicamente +1h.',
    usado_en    DATETIME            NULL
                COMMENT 'UTC del consumo del token. NULL = aún utilizable. No se reusa.',
    PRIMARY KEY (id),
    UNIQUE KEY uq_password_resets_token_hash (token_hash),
    KEY idx_password_resets_user_id (user_id),
    CONSTRAINT fk_password_resets_user
        FOREIGN KEY (user_id) REFERENCES users (id)
        ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Tokens de recuperación de contraseña (mesa servida — feature en Sprint 2.x).';
