-- SQL para actualizar tabla de recuperación de contraseña con seguridad mejorada

-- Primero, eliminar la tabla anterior si existe (cuidado: borra los datos)
DROP TABLE IF EXISTS password_reset_tokens;

-- Crear tabla nueva con todas las columnas
CREATE TABLE password_reset_tokens (
    id INT PRIMARY KEY AUTO_INCREMENT,
    idUsuario INT NOT NULL,
    token VARCHAR(255) NOT NULL UNIQUE,
    email VARCHAR(255) NOT NULL,
    verification_code VARCHAR(6) NOT NULL,
    ip_address VARCHAR(45),
    user_agent VARCHAR(500),
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    expiresAt DATETIME NOT NULL,
    used BOOLEAN DEFAULT FALSE,
    verified BOOLEAN DEFAULT FALSE,
    verification_attempts INT DEFAULT 0,
    FOREIGN KEY (idUsuario) REFERENCES usuarios(idUsuario) ON DELETE CASCADE,
    INDEX idx_token (token),
    INDEX idx_email (email),
    INDEX idx_expires (expiresAt)
);

-- Tabla de logs de cambios de contraseña
DROP TABLE IF EXISTS password_change_logs;

CREATE TABLE password_change_logs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    idUsuario INT NOT NULL,
    ip_address VARCHAR(45),
    user_agent VARCHAR(500),
    success BOOLEAN DEFAULT TRUE,
    reason VARCHAR(255),
    createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (idUsuario) REFERENCES usuarios(idUsuario) ON DELETE CASCADE,
    INDEX idx_usuario (idUsuario),
    INDEX idx_fecha (createdAt)
);
