const db = require('../config/db'); const getCoordinatesFromBody = (body) => { const lat = body?.latitud ?? body?.latitude; const lng = body?.longitud ?? body?.longitude; if (lat === undefined || lat === null || lng === undefined || lng === null) { return null; } return { lat, lng }; }; const upsertOnlineAvailability = async (dni, lat, lng) => { const [rows] = await db.query( `SELECT id_usuario FROM c_trazabilidad_online WHERE id_usuario = ? LIMIT 1`, [dni] ); if (rows.length > 0) { await db.query( `UPDATE c_trazabilidad_online SET latitud = ?, longitud = ?, fecha = NOW() WHERE id_usuario = ?`, [String(lat), String(lng), dni] ); return; } await db.query( `INSERT INTO c_trazabilidad_online (latitud, longitud, id_usuario, fecha) VALUES (?, ?, ?, NOW())`, [String(lat), String(lng), dni] ); }; const getAvailability = async (req, res) => { try { const dni = String(req.user.dni); const [rows] = await db.query( `SELECT COUNT(*) AS total FROM c_trazabilidad_online WHERE id_usuario = ?`, [dni] ); return res.json({ success: true, available: Number(rows[0]?.total || 0) > 0 }); } catch (error) { console.error('Error getting availability:', error); return res.status(500).json({ success: false, error: error.message }); } }; const setAvailability = async (req, res) => { try { const coords = getCoordinatesFromBody(req.body); if (!coords) { return res.status(400).json({ success: false, error: 'missing_coords', message: 'latitud/longitud or latitude/longitude are required' }); } await upsertOnlineAvailability(String(req.user.dni), coords.lat, coords.lng); return res.json({ success: true, available: true }); } catch (error) { console.error('Error setting availability:', error); return res.status(500).json({ success: false, error: error.message }); } }; const deleteAvailability = async (req, res) => { try { await db.query( `DELETE FROM c_trazabilidad_online WHERE id_usuario = ?`, [String(req.user.dni)] ); return res.json({ success: true, available: false }); } catch (error) { console.error('Error deleting availability:', error); return res.status(500).json({ success: false, error: error.message }); } }; module.exports = { deleteAvailability, getAvailability, setAvailability, upsertOnlineAvailability };