-- =============================================================================
-- Migración:    0001_create_users_table
-- Sprint:       1.1 — auth + RBAC + audit
-- Tabla:        users
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: ninguna (es la primera migración del schema de sistema).
--
-- Descripción:
--   Usuarios humanos que pueden entrar al sistema (vendedores, gerentes,
--   contadores, admins, etc). Una fila por persona dentro de UN tenant.
--
-- Notas de diseño:
--   - password_hash: SIEMPRE Argon2id, generado en PHP. Nunca en BD.
--   - email UNIQUE: usado como identificador de login. Si un usuario es
--     dado de baja (soft delete) y se quiere reusar el email para alguien
--     nuevo, primero hay que renombrar el email del soft-deleted (ej:
--     "viejo+deleted-42@dominio.cl") porque MySQL no acepta duplicados
--     aunque el viejo esté soft-deleted.
--   - eliminado_en: soft delete. NUNCA hacer DELETE físico de filas.
--   - ultimo_login_en/ultimo_login_ip: actualizados por Auth en cada login.
-- =============================================================================

CREATE TABLE users (
    id              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                    COMMENT 'PK auto-incremental del usuario.',
    nombre          VARCHAR(150)    NOT NULL
                    COMMENT 'Nombre completo legible (ej: "María González").',
    email           VARCHAR(180)    NOT NULL
                    COMMENT 'Email único usado como identificador de login.',
    password_hash   VARCHAR(255)    NOT NULL
                    COMMENT 'Hash Argon2id. Nunca guardar password en claro.',
    rut             VARCHAR(12)     NOT NULL
                    COMMENT 'RUT chileno con puntos y guión (ej: "12.345.678-9" o "11.111.111-K").',
    telefono        VARCHAR(20)         NULL
                    COMMENT 'Celular del usuario, opcional.',
    avatar_url      VARCHAR(500)        NULL
                    COMMENT 'Path en Cloudflare R2 a la foto de perfil.',
    activo          TINYINT(1)      NOT NULL DEFAULT 1
                    COMMENT '1=puede entrar al sistema, 0=desactivado por admin.',
    ultimo_login_en DATETIME            NULL
                    COMMENT 'UTC del último login exitoso (lo escribe Auth).',
    ultimo_login_ip VARCHAR(45)         NULL
                    COMMENT 'IPv4 o IPv6 desde donde se logueó la última vez.',
    creado_en       DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                    COMMENT 'UTC de creación. Inmutable.',
    actualizado_en  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                                             ON UPDATE CURRENT_TIMESTAMP
                    COMMENT 'UTC de la última edición. Auto-actualizado por MySQL.',
    eliminado_en    DATETIME            NULL
                    COMMENT 'UTC del soft-delete. NULL = activo. NUNCA hacer DELETE físico.',
    PRIMARY KEY (id),
    UNIQUE KEY uq_users_email (email),
    KEY idx_users_rut (rut),
    KEY idx_users_eliminado_en (eliminado_en)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Usuarios humanos del tenant (vendedores, gerentes, admins, etc).';
