const db = require('../config/db'); const Ticket = { findAll: async (companyId) => { const [rows] = await db.query(` SELECT t.*, u.nombre as usuario_nombre, d.nombre as departamento_nombre, a.nombre as asignado_nombre FROM tickets t LEFT JOIN users u ON t.user_id = u.id LEFT JOIN departments d ON t.department_id = d.id LEFT JOIN users a ON t.assigned_to = a.id WHERE t.company_id = ? ORDER BY t.created_at DESC `, [companyId]); return rows; }, findByUser: async (companyId, userId) => { const [rows] = await db.query(` SELECT t.*, d.nombre as departamento_nombre, a.nombre as asignado_nombre FROM tickets t LEFT JOIN departments d ON t.department_id = d.id LEFT JOIN users a ON t.assigned_to = a.id WHERE t.company_id = ? AND t.user_id = ? ORDER BY t.created_at DESC `, [companyId, userId]); return rows; }, findByAgent: async (companyId, agentId) => { const [rows] = await db.query(` SELECT t.*, u.nombre as usuario_nombre, d.nombre as departamento_nombre FROM tickets t LEFT JOIN users u ON t.user_id = u.id LEFT JOIN departments d ON t.department_id = d.id WHERE t.company_id = ? AND t.assigned_to = ? ORDER BY t.created_at DESC `, [companyId, agentId]); return rows; }, findById: async (id) => { const [rows] = await db.query(` SELECT t.*, u.nombre as usuario_nombre, u.email as usuario_email, d.nombre as departamento_nombre, a.nombre as asignado_nombre FROM tickets t LEFT JOIN users u ON t.user_id = u.id LEFT JOIN departments d ON t.department_id = d.id LEFT JOIN users a ON t.assigned_to = a.id WHERE t.id = ? `, [id]); return rows[0]; }, create: async (companyId, userId, departmentId, asunto, mensaje, prioridad = 'media') => { const [result] = await db.query( 'INSERT INTO tickets (company_id, user_id, department_id, asunto, mensaje, prioridad) VALUES (?, ?, ?, ?, ?, ?)', [companyId, userId, departmentId, asunto, mensaje, prioridad] ); return result.insertId; }, update: async (id, data) => { const fields = []; const values = []; for (const [key, value] of Object.entries(data)) { fields.push(`${key} = ?`); values.push(value); } if (fields.length === 0) return; values.push(id); await db.query(`UPDATE tickets SET ${fields.join(', ')} WHERE id = ?`, values); }, getResponses: async (ticketId) => { const [rows] = await db.query(` SELECT r.*, u.nombre as usuario_nombre, u.rol as usuario_rol FROM ticket_respuestas r LEFT JOIN users u ON r.user_id = u.id WHERE r.ticket_id = ? ORDER BY r.created_at ASC `, [ticketId]); return rows; }, addResponse: async (ticketId, userId, mensaje) => { const [result] = await db.query( 'INSERT INTO ticket_respuestas (ticket_id, user_id, mensaje) VALUES (?, ?, ?)', [ticketId, userId, mensaje] ); return result.insertId; }, countByStatus: async (companyId) => { const [rows] = await db.query( 'SELECT status, COUNT(*) as total FROM tickets WHERE company_id = ? GROUP BY status', [companyId] ); return rows; } }; module.exports = Ticket;