const express = require('express'); const router = express.Router(); const db = require('../database'); const { verifyPassword } = require('../auth'); const fs = require('fs').promises; const path = require('path'); // ================================================================ // DELETE /api/system/factory-reset - Limpar sistema inteiro // ================================================================ router.delete('/factory-reset', async (req, res) => { try { const { password } = req.body; const userId = req.user.id; if (!password) { return res.status(400).json({ error: 'A senha é obrigatória para confirmar a limpeza.' }); } // 1. Validar usuário e senha const user = await db.get('SELECT * FROM users WHERE id = ?', [userId]); if (!user) { return res.status(404).json({ error: 'Usuário não encontrado' }); } const validPassword = await verifyPassword(password, user.password_hash); if (!validPassword) { return res.status(401).json({ error: 'A senha atual está incorreta. Acesso negado.' }); } // 2. Limpar banco de dados (tabelas de imagens e GTOs) await db.run('DELETE FROM gto_images'); await db.run('DELETE FROM gtos'); await db.run('DELETE FROM images'); // 3. Limpar arquivos físicos (uploads e processed) const dirsToClean = [ path.join(__dirname, '..', 'uploads'), path.join(__dirname, '..', 'processed') ]; let deletedFiles = 0; for (const dirPath of dirsToClean) { try { const files = await fs.readdir(dirPath); for (const file of files) { // Ignora arquivos como .gitkeep se existirem if (file === '.gitkeep') continue; await fs.unlink(path.join(dirPath, file)); deletedFiles++; } } catch (err) { console.error(`Erro ao limpar a pasta ${dirPath}:`, err); } } res.json({ success: true, message: 'Sistema resetado com sucesso.', filesDeleted: deletedFiles }); } catch (error) { console.error('Erro no Factory Reset:', error); res.status(500).json({ error: 'Erro interno ao processar a limpeza' }); } }); module.exports = router;