const modalContent = {
revenus: {
title: "Vos revenus TIE",
text: "Les revenus générés par vos clients privés apparaîtront ici. Vous pourrez suivre vos gains du jour, de la semaine, du mois et votre progression.",
icon: ``
},
status: {
title: "Votre statut est important",
text: "Quand vous êtes en ligne, vous pouvez recevoir des demandes. Pensez à passer en indisponible ou en vacances si vous ne pouvez pas répondre, pour éviter de manquer une course ou de frustrer un client.",
icon: ``
},
clients: {
title: "Votre premier challenge client",
text: "Objectif simple : lors de votre prochaine course réussie, proposez au client de scanner votre QR code TIE. Il pourra vous retrouver directement pour ses prochains trajets privés.",
icon: ``
},
courses: {
title: "Vos courses du jour",
text: "Quand vos clients privés vous enverront des demandes, vous verrez ici les trajets du jour, les prix proposés, vos revenus et le suivi de votre activité.",
icon: ``
},
demandes: {
title: "Demandes en attente",
text: "Lorsqu’un client vous demande une course, vous disposez d’un temps limité pour accepter, refuser ou proposer un confrère de confiance.",
icon: ``
},
qr: {
title: "Votre QR code chauffeur",
text: "Montrez ce QR code à vos clients privés pour qu’ils puissent enregistrer votre profil et vous recontacter facilement via TIE.",
icon: ``
},
challenge: {
title: "Lancer votre premier challenge",
text: "Pendant vos 5 prochaines courses, présentez TIE aux clients satisfaits. L’objectif : obtenir votre premier client privé enregistré.",
icon: ``
},
menu: {
title: "Menu chauffeur",
text: "Ici, vous retrouverez bientôt votre profil, vos documents, vos tarifs, vos disponibilités et le support TIE.",
icon: ``
}
};
function getGreeting(name) {
const hour = new Date().getHours();
if (hour >= 18 || hour < 5) return `Bonsoir ${name}`;
return `Bonjour ${name}`;
}
function openModal(type) {
const modal = document.getElementById("modal");
const backdrop = document.getElementById("modalBackdrop");
const panel = document.getElementById("modalPanel");
const title = document.getElementById("modalTitle");
const text = document.getElementById("modalText");
const iconContainer = document.getElementById("modalIcon");
const data = modalContent[type] || modalContent.challenge;
title.textContent = data.title;
text.textContent = data.text;
iconContainer.innerHTML = data.icon;
modal.classList.remove("hidden");
document.body.style.overflow = "hidden";
requestAnimationFrame(() => {
backdrop.classList.remove("opacity-0");
panel.classList.remove("translate-y-full");
});
}
function closeModal() {
const modal = document.getElementById("modal");
const backdrop = document.getElementById("modalBackdrop");
const panel = document.getElementById("modalPanel");
backdrop.classList.add("opacity-0");
panel.classList.add("translate-y-full");
setTimeout(() => {
modal.classList.add("hidden");
document.body.style.overflow = "";
}, 300);
}
const statusConfig = {
online: {
label: "En ligne",
dotColor: "bg-emerald-400",
pingColor: "bg-emerald-400",
btnBg: "bg-emerald-500/10",
btnBorder: "border-emerald-500/20",
btnText: "text-emerald-400",
toast: "Vous êtes en ligne",
toastDot: "bg-emerald-400"
},
unavailable: {
label: "Indisponible",
dotColor: "bg-orange-400",
pingColor: "bg-orange-400",
btnBg: "bg-orange-500/10",
btnBorder: "border-orange-500/20",
btnText: "text-orange-400",
toast: "Vous êtes indisponible",
toastDot: "bg-orange-400"
},
vacation: {
label: "En vacances",
dotColor: "bg-sky-400",
pingColor: "bg-sky-400",
btnBg: "bg-sky-500/10",
btnBorder: "border-sky-500/20",
btnText: "text-sky-400",
toast: "Vous êtes en vacances",
toastDot: "bg-sky-400"
}
};
function showToast(message, dotColor = "bg-emerald-400") {
const toast = document.getElementById("toast");
const text = document.getElementById("toastText");
const dot = document.getElementById("toastDot");
if (text) text.textContent = message;
if (dot) dot.className = `w-2 h-2 rounded-full ${dotColor}`;
toast.classList.remove("hidden");
toast.classList.add("flex");
clearTimeout(window.__toastTimer);
window.__toastTimer = setTimeout(() => {
toast.classList.add("hidden");
toast.classList.remove("flex");
}, 2200);
}
function setActiveStep(stepNum) {
const container = document.getElementById('stepsContainer');
if (!container) return;
const ping1 = document.getElementById('ping-1');
if (ping1 && !ping1.dataset.stopped) {
ping1.style.animation = 'none';
ping1.style.opacity = '0';
ping1.dataset.stopped = 'true';
}
container.querySelectorAll('.step-card').forEach(card => {
const body = card.querySelector('.step-body');
const num = parseInt(card.dataset.step);
if (num === stepNum) {
card.classList.add('bg-tie-elevated', 'border-emerald-500/30', 'scale-[1.01]');
card.classList.remove('bg-tie-surface', 'border-white/[0.08]');
body.style.maxHeight = body.scrollHeight + 'px';
body.classList.remove('opacity-0');
body.classList.add('opacity-100');
} else {
card.classList.remove('bg-tie-elevated', 'border-emerald-500/30', 'scale-[1.01]');
card.classList.add('bg-tie-surface', 'border-white/[0.08]');
body.style.maxHeight = '0px';
body.classList.remove('opacity-100');
body.classList.add('opacity-0');
}
});
}
function toggleStep(stepNum) {
const container = document.getElementById('stepsContainer');
if (!container) return;
const card = container.querySelector(`[data-step="${stepNum}"]`);
if (!card) return;
const body = card.querySelector('.step-body');
if (body.classList.contains('opacity-100')) return;
setActiveStep(stepNum);
}
function handleStatusClick() {
if (!localStorage.getItem("statusHintShown")) {
localStorage.setItem("statusHintShown", "true");
openModal("status");
return;
}
toggleStatusDropdown();
}
function toggleStatusDropdown() {
const dropdown = document.getElementById("statusDropdown");
dropdown.classList.toggle("hidden");
}
function selectStatus(key) {
const cfg = statusConfig[key];
const btn = document.getElementById("statusBtn");
const ping = document.getElementById("statusPing");
const dot = document.getElementById("statusDotInner");
const label = document.getElementById("statusLabel");
if (!btn || !cfg) return;
btn.className = `shrink-0 inline-flex items-center gap-2 rounded-full px-3.5 py-2 text-xs font-semibold active:scale-95 transition ${cfg.btnBg} ${cfg.btnBorder} ${cfg.btnText}`;
if (ping) ping.className = `animate-ping absolute inline-flex h-full w-full rounded-full opacity-60 ${cfg.pingColor}`;
if (dot) dot.className = `relative inline-flex rounded-full h-2 w-2 ${cfg.dotColor}`;
if (label) label.textContent = cfg.label;
document.getElementById("statusDropdown").classList.add("hidden");
showToast(cfg.toast, cfg.toastDot);
}
function copyLink() {
if (navigator.clipboard) {
navigator.clipboard.writeText("https://tie.app/chauffeur/TIE-123456").catch(() => {});
}
showToast("Lien copié dans le presse-papiers");
}
document.addEventListener("click", function (e) {
const dropdown = document.getElementById("statusDropdown");
const btn = document.getElementById("statusBtn");
if (dropdown && !dropdown.classList.contains("hidden") && !dropdown.contains(e.target) && btn && !btn.contains(e.target)) {
dropdown.classList.add("hidden");
}
});
document.addEventListener("keydown", function (event) {
if (event.key === "Escape") {
closeModal();
const dropdown = document.getElementById("statusDropdown");
if (dropdown) dropdown.classList.add("hidden");
}
});
document.addEventListener("DOMContentLoaded", function () {
const name = localStorage.getItem("driverName") || "Jean";
document.getElementById("header-greeting").textContent = getGreeting(name.split(" ")[0]);
setTimeout(() => setActiveStep(1), 50);
});