const db = require('../config/db'); class HerramientaAsignacion { static async findAll(companyId, filtros = {}) { let sql = ` SELECT tha.*, u.nombre as tecnico_nombre, u.email as tecnico_email, hs.nombre as set_nombre, hs.codigo as set_codigo, hs.foto_url as set_foto_url, h.nombre as herramienta_nombre, h.codigo as herramienta_codigo, h.foto_url as herramienta_foto_url, tv.titulo as visita_titulo, tv.ticket_id, t.asunto as ticket_asunto, adm.nombre as asignado_por_nombre FROM tecnico_herramientas_asignaciones tha INNER JOIN users u ON tha.tecnico_id = u.id LEFT JOIN herramientas_sets hs ON tha.set_id = hs.id LEFT JOIN herramientas h ON tha.herramienta_id = h.id LEFT JOIN ticket_visitas tv ON tha.ticket_visita_id = tv.id LEFT JOIN tickets t ON tv.ticket_id = t.id LEFT JOIN users adm ON tha.asignado_por = adm.id WHERE tha.company_id = ? `; const params = [companyId]; if (filtros.tecnico_id) { sql += ' AND tha.tecnico_id = ?'; params.push(filtros.tecnico_id); } if (filtros.estado) { sql += ' AND tha.estado = ?'; params.push(filtros.estado); } if (filtros.tipo_asignacion) { sql += ' AND tha.tipo_asignacion = ?'; params.push(filtros.tipo_asignacion); } sql += ' ORDER BY tha.id DESC'; const [rows] = await db.query(sql, params); return rows; } static async findByTecnico(companyId, tecnicoId) { return await this.findAll(companyId, { tecnico_id: tecnicoId }); } static async findById(id, companyId) { const [rows] = await db.query( `SELECT tha.*, u.nombre as tecnico_nombre, u.email as tecnico_email, hs.nombre as set_nombre, hs.codigo as set_codigo, hs.foto_url as set_foto_url, h.nombre as herramienta_nombre, h.codigo as herramienta_codigo, h.foto_url as herramienta_foto_url FROM tecnico_herramientas_asignaciones tha INNER JOIN users u ON tha.tecnico_id = u.id LEFT JOIN herramientas_sets hs ON tha.set_id = hs.id LEFT JOIN herramientas h ON tha.herramienta_id = h.id WHERE tha.id = ? AND tha.company_id = ?`, [id, companyId] ); return rows[0] || null; } static async create(data) { const { company_id, tecnico_id, set_id = null, herramienta_id = null, ticket_visita_id = null, tipo_asignacion = 'dotacion_fija', fecha_asignacion = new Date(), observaciones_entrega = null, foto_entrega_url = null, asignado_por = null } = data; const [res] = await db.query( `INSERT INTO tecnico_herramientas_asignaciones (company_id, tecnico_id, set_id, herramienta_id, ticket_visita_id, tipo_asignacion, fecha_asignacion, estado, observaciones_entrega, foto_entrega_url, asignado_por) VALUES (?, ?, ?, ?, ?, ?, ?, 'asignado', ?, ?, ?)`, [company_id, tecnico_id, set_id, herramienta_id, ticket_visita_id, tipo_asignacion, fecha_asignacion, observaciones_entrega, foto_entrega_url, asignado_por] ); return res.insertId; } static async devolver(id, companyId, { observaciones_devolucion = null, estado = 'devuelto', foto_devolucion_url = null }) { let sql = `UPDATE tecnico_herramientas_asignaciones SET estado = ?, fecha_devolucion = NOW(), observaciones_devolucion = ?`; const params = [estado, observaciones_devolucion]; if (foto_devolucion_url) { sql += ', foto_devolucion_url = ?'; params.push(foto_devolucion_url); } sql += ' WHERE id = ? AND company_id = ?'; params.push(id, companyId); await db.query(sql, params); } static async delete(id, companyId) { await db.query('DELETE FROM tecnico_herramientas_asignaciones WHERE id = ? AND company_id = ?', [id, companyId]); } } module.exports = HerramientaAsignacion;