import React, { useState, useEffect, useCallback, useMemo } from 'react'; import { Dumbbell, User, Lock, ChevronRight, Calendar, Activity, ArrowLeft, Flame, CheckCircle2, Clock, Zap, Play, Pause, RotateCcw, LogOut } from 'lucide-react'; const App = () => { // --- STATO --- const [currentUser, setCurrentUser] = useState(null); const [view, setView] = useState('login'); const [selectedExercise, setSelectedExercise] = useState(null); // Salvataggio dati utenti (Bio e Goal) const [userConfigs, setUserConfigs] = useState({}); // --- DATABASE UTENTI --- const validUsers = useMemo(() => ({ "LEONARDO GREGO": "Leo.G011", "LEONARDO THIKA": "Leo.T011", "ETTORE GRIGOLLI": "3485541971" }), []); // --- DOMANDE (10 + 10) --- const bioQuestions = [ { id: 'weight', text: "Qual è il tuo peso attuale (kg)?", type: "number" }, { id: 'height', text: "Qual è la tua altezza (cm)?", type: "number" }, { id: 'age', text: "Quanti anni hai?", type: "number" }, { id: 'experience', text: "Livello di esperienza?", type: "select", options: ["Principiante", "Intermedio", "Avanzato"] }, { id: 'gender', text: "Genere?", type: "select", options: ["Uomo", "Donna"] }, { id: 'diet', text: "Stato della tua dieta?", type: "select", options: ["Mantenimento", "Ipercalorica", "Ipocalorica"] }, { id: 'meals', text: "Pasti al giorno?", type: "number" }, { id: 'sleep', text: "Ore di sonno medie?", type: "number" }, { id: 'injuries', text: "Hai infortuni?", type: "select", options: ["Nessuno", "Schiena", "Spalle", "Ginocchia"] }, { id: 'activity', text: "Attività lavorativa?", type: "select", options: ["Sedentaria", "Attiva", "Fisica"] } ]; const goalQuestions = [ { id: 'goal', text: "Qual è il tuo scopo?", type: "select", options: ["Massa Muscolare", "Dimagrimento", "Forza", "Resistenza"] }, { id: 'freq', text: "Giorni di allenamento/settimana?", type: "number" }, { id: 'duration', text: "Minuti per sessione?", type: "number" }, { id: 'intensity', text: "Intensità desiderata?", type: "select", options: ["Bassa", "Media", "Alta"] }, { id: 'focus', text: "Punto carente su cui lavorare?", type: "select", options: ["Braccia", "Gambe", "Core", "Spalle"] }, { id: 'cardio', text: "Ti piace il cardio?", type: "select", options: ["Sì", "No", "Solo fine sessione"] }, { id: 'equipment', text: "Dove ti alleni?", type: "select", options: ["Palestra", "Casa (Corpo Libero)", "Casa (Pesi)"] }, { id: 'supps', text: "Usi integratori?", type: "select", options: ["Sì", "No"] }, { id: 'tempo', text: "Preferenza esecuzione?", type: "select", options: ["Esplosiva", "Controllata", "Lenta"] }, { id: 'motivation', text: "Motivazione (1-10)?", type: "number" } ]; const exerciseDB = { "BRACCIA": ["Curl Bilanciere", "Hammer Curl", "Dips Panchetta", "Pushdown Fune", "French Press", "Curl Concentrato", "Spider Curl", "Estensioni Manubrio", "Diamond Pushups", "Zottman Curl", "Curl Panca Scott", "Kickback", "Preacher Curl", "Cavi Alti Bicipiti", "Curl Presa Inversa", "Tricipiti Corda", "Piegamenti Stretti", "Curl Elastico", "Skull Crushers", "Drag Curl"], "ADDOME": ["Crunch Terra", "Plank", "Leg Raises", "Russian Twist", "Mountain Climber", "V-Ups", "Bicycle Crunch", "Hollow Hold", "Side Plank", "Reverse Crunch", "Flutter Kicks", "Dead Bug", "Toe Touches", "Plank Jack", "Ab Wheel", "Windshield Wipers", "L-Sit", "Hanging Leg Raises", "Spider Plank", "Crunch ai Cavi"], "GAMBE": ["Squat Libero", "Affondi Camminati", "Leg Press", "Leg Extension", "Leg Curl", "Stacco Rumeno", "Calf Raise", "Bulgarian Split Squat", "Goblet Squat", "Sumo Squat", "Glute Bridge", "Step Up", "Jump Squat", "Affondi Laterali", "Hack Squat", "Hip Thrust", "Sissy Squat", "Nordic Curl", "Wall Sit", "Box Jump"], "ADDOME & DORSO": ["Trazioni", "Rematore Manubrio", "Lat Machine", "Pulley Basso", "Facepull", "Pull Over", "Bent Over Row", "T-Bar Row", "Chin Ups", "Superman Hold", "Panca Piana", "Pushups", "Dips Parallele", "Spinte Inclinate", "Croci Cavi", "Spinte Spalle", "Alzate Laterali", "Alzate Posteriori", "Shrugs", "Iperestensioni"] }; // --- LOGICA DI SUPPORTO --- const handleLogout = () => { setView('login'); setCurrentUser(null); }; // --- COMPONENTI --- const LoginForm = () => { const [name, setName] = useState(''); const [pass, setPass] = useState(''); const [localErr, setLocalErr] = useState(''); const onSubmit = (e) => { e.preventDefault(); const n = name.trim().toUpperCase(); if (validUsers[n] && validUsers[n] === pass) { setCurrentUser(n); const savedBio = localStorage.getItem(`bio_${n}`); setView(savedBio ? 'dashboard' : 'onboarding_bio'); } else { setLocalErr('Username o Password errati.'); } }; return (
{title} • {idx + 1} / 10
UTENTE: {currentUser}
Piano 30 giorni creato per te
{cat}
TIMER RECUPERO
SERIE
4
REP
12-15
Assicurati di mantenere il controllo durante la fase eccentrica. Il timer è impostato su {baseTime}s basato sul tuo profilo {userData.experience || 'Standard'}.
6 Esercizi • Timer Adattivo
}