const db = require('../config/db'); class HerramientaSet { static async findAll(companyId) { const [sets] = await db.query( `SELECT hs.*, COUNT(hsi.id) as total_herramientas, COALESCE(SUM(hsi.cantidad), 0) as total_items FROM herramientas_sets hs LEFT JOIN herramientas_set_items hsi ON hs.id = hsi.set_id WHERE hs.company_id = ? GROUP BY hs.id ORDER BY hs.id DESC`, [companyId] ); for (const s of sets) { s.herramientas = await this.getItems(s.id); } return sets; } static async findById(id, companyId) { const [rows] = await db.query( 'SELECT * FROM herramientas_sets WHERE id = ? AND company_id = ?', [id, companyId] ); if (!rows[0]) return null; const set = rows[0]; set.herramientas = await this.getItems(set.id); return set; } static async getItems(setId) { const [items] = await db.query( `SELECT h.*, hsi.cantidad FROM herramientas_set_items hsi INNER JOIN herramientas h ON hsi.herramienta_id = h.id WHERE hsi.set_id = ? ORDER BY h.nombre ASC`, [setId] ); return items; } static async create(data, itemIds = []) { const { company_id, nombre, codigo = null, descripcion = null, categoria = 'general', is_active = 1 } = data; const [res] = await db.query( `INSERT INTO herramientas_sets (company_id, nombre, codigo, descripcion, categoria, is_active) VALUES (?, ?, ?, ?, ?, ?)`, [company_id, nombre, codigo, descripcion, categoria, is_active] ); const setId = res.insertId; if (Array.isArray(itemIds) && itemIds.length > 0) { const values = itemIds.map(hId => [setId, parseInt(hId), 1]); await db.query( 'INSERT INTO herramientas_set_items (set_id, herramienta_id, cantidad) VALUES ?', [values] ); } return setId; } static async update(id, companyId, data, itemIds = null) { const fields = []; const values = []; const allowed = ['nombre', 'codigo', 'descripcion', 'categoria', 'is_active']; for (const [key, val] of Object.entries(data)) { if (allowed.includes(key)) { fields.push(`${key} = ?`); values.push(val); } } if (fields.length > 0) { values.push(id, companyId); await db.query(`UPDATE herramientas_sets SET ${fields.join(', ')} WHERE id = ? AND company_id = ?`, values); } if (Array.isArray(itemIds)) { await db.query('DELETE FROM herramientas_set_items WHERE set_id = ?', [id]); if (itemIds.length > 0) { const valuesItems = itemIds.map(hId => [id, parseInt(hId), 1]); await db.query( 'INSERT INTO herramientas_set_items (set_id, herramienta_id, cantidad) VALUES ?', [valuesItems] ); } } } static async delete(id, companyId) { await db.query('DELETE FROM herramientas_sets WHERE id = ? AND company_id = ?', [id, companyId]); } } module.exports = HerramientaSet;