swimmingArt/public/js/coach.js

137 lines
3.9 KiB
JavaScript

const duracionesPorModalidadYTipo = {
solo: {
técnica: { texto: "2:00", valor: 120 },
libre: { texto: "2:15", valor: 135 }
},
duo: {
técnica: { texto: "2:20", valor: 140 },
libre: { texto: "2:45", valor: 165 }
},
equipo: {
técnica: { texto: "2:50", valor: 170 },
libre: { texto: "3:30", valor: 210 }
}
};
function actualizarDuracionTexto() {
const tipo = document.getElementById("tipoCompetencia").value;
const modalidad = document.getElementById("modalidad").value;
const input = document.getElementById("duration");
if (duracionesPorModalidadYTipo[modalidad] && duracionesPorModalidadYTipo[modalidad][tipo]) {
input.value = duracionesPorModalidadYTipo[modalidad][tipo].texto;
input.dataset.segundos = duracionesPorModalidadYTipo[modalidad][tipo].valor;
} else {
input.value = traducciones[langActual].form.durationPlaceholder;
input.dataset.segundos = "";
}
}
document.getElementById("tipoCompetencia").addEventListener("change", actualizarDuracionTexto);
document.getElementById("modalidad").addEventListener("change", actualizarDuracionTexto);
// Envío del formulario
document.getElementById('rutinaForm').addEventListener('submit', async function (e) {
e.preventDefault();
const title = document.getElementById('title').value.trim();
const duration = parseInt(document.getElementById('duration').dataset.segundos);
const nombreCompetencia = document.getElementById('nombreCompetencia').value.trim();
const tipoCompetencia = document.getElementById('tipoCompetencia').value;
const modalidad = document.getElementById('modalidad').value;
const musicFile = document.getElementById('music').files[0];
if (!title || isNaN(duration) || !nombreCompetencia || !tipoCompetencia || !modalidad) {
alert("Completa todos los campos.");
return;
}
let musicUrl = "";
if (musicFile) {
const formData = new FormData();
formData.append('music', musicFile);
try {
const uploadRes = await fetch('/api/rutinas/upload/music', {
method: 'POST',
body: formData
});
const uploadData = await uploadRes.json();
if (!uploadRes.ok) {
throw new Error(uploadData.error || 'Error al subir archivo');
}
musicUrl = uploadData.url;
} catch (err) {
console.error('❌ Error al subir música:', err);
alert('Error al subir el archivo de música. Intenta de nuevo.');
return;
}
}
const routine = {
title,
duration,
nombreCompetencia,
tipoCompetencia,
modalidad,
participantes: [],
createdBy: "coach-id-ejemplo",
musicUrl,
elements: [],
formaciones: []
};
try {
const res = await fetch('/api/rutinas', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(routine)
});
const data = await res.json();
if (res.ok) {
alert("Rutina guardada correctamente.");
window.location.href = "equipoDisponibles.html";
} else {
alert("Error al guardar la rutina: " + (data.message || "Error desconocido"));
}
} catch (err) {
console.error(err);
alert("Error al guardar la rutina.");
}
});
function logout() {
sessionStorage.clear();
alert("Sesión cerrada");
window.location.href = "../index.html";
}
// Mostrar nombre del usuario logueado en el header
window.addEventListener('DOMContentLoaded', async () => {
const userId = sessionStorage.getItem("userId");
if (!userId) {
alert("Sesión expirada, inicia sesión de nuevo.");
window.location.href = "index.html";
return;
}
try {
const res = await fetch(`/api/users/${userId}`);
const user = await res.json();
if (user?.name) {
document.getElementById("nombreUsuarioHeader").textContent = user.name;
document.getElementById("nombreUsuarioDropdown").textContent = "Coach " + user.name;
}
} catch (err) {
console.error("❌ Error al obtener datos del usuario:", err);
}
});