import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useParams, useNavigate } from 'react-router-dom'; import { Plus, Edit2, Trash2, ArrowLeft, X, Save } from 'lucide-react'; import { useAuth } from '../lib/auth'; import { useTenant } from '../lib/tenant'; import { api } from '../lib/api'; import { logError } from '../lib/logger'; export default function TrackDaysPage() { const { t } = useTranslation(); const { token } = useAuth(); const { selectedOrgId } = useTenant(); const { trackId } = useParams<{ trackId: string }>(); const navigate = useNavigate(); const [days, setDays] = useState([]); const [track, setTrack] = useState(null); const [editing, setEditing] = useState(null); const [saving, setSaving] = useState(false); const load = async (): Promise => { if (!token || !selectedOrgId) return; try { const [trackData, daysData] = await Promise.all([ api.get(`/v1/admin/tracks/${trackId}`, token, selectedOrgId), api.get(`/v1/admin/tracks/${trackId}/days`, token, selectedOrgId) ]); setTrack(trackData); setDays(daysData); } catch (err) { logError(err); } }; useEffect(() => { load(); }, [token, selectedOrgId]); const emptyDay = { dayNumber: (days.length || 0) + 1, title: '', lessonText: '', audioUrl: '', exerciseType: 'TEXT', exercisePrompt: '', validationKeyword: '' }; const saveDay = async (e: React.FormEvent) => { e.preventDefault(); if (!token || !selectedOrgId) return; setSaving(true); try { if (editing.id) { await api.put(`/v1/admin/tracks/${trackId}/days/${editing.id}`, editing, token, selectedOrgId); } else { await api.post(`/v1/admin/tracks/${trackId}/days`, editing, token, selectedOrgId); } await load(); setEditing(null); } catch (err) { logError(err); } finally { setSaving(false); } }; const del = async (dayId: string) => { if (!confirm(t('tracks.confirm_delete'))) return; try { await api.delete(`/v1/admin/tracks/${trackId}/days/${dayId}`, token, selectedOrgId); load(); } catch (err) { logError(err); } }; const inp = "w-full border border-slate-200 rounded-xl px-4 py-2.5 text-sm outline-none focus:ring-2 focus:ring-slate-300"; return (

{track?.title}

{days.length} {t('tracks.days')}

{editing && (

{editing.id ? `${t('tracks.edit_day')} ${editing.dayNumber}` : t('tracks.new_day')}

setEditing((d: any) => ({ ...d, dayNumber: parseInt(e.target.value) }))} />
setEditing((d: any) => ({ ...d, title: e.target.value }))} />