import { loadGraph } from './tempgraph.ts'; let timer = 0; let isRunning = false; let log: Array<{ time: string, event: string, temp?: number }> = []; let targets: number[] = []; let currentTargetIndex = 0; let interval: NodeJS.Timeout | null = null; declare global { interface Window { startTimer: () => void; stopTimer: () => void; logEvent: (eventName: string) => void; resetSystem: () => void; setPlan: () => void; navigateTemp: (direction: number) => void; logTemp: (temp: number) => void; exportCSV: () => void; showGraph: () => void; hideGraph: () => void; } } function startTimer(): void { if (isRunning) { alert("Timer is already running. Click again to reset."); return; } timer = 0; updateTimerDisplay(); isRunning = true; interval = setInterval(() => { timer++; updateTimerDisplay(); }, 1000); } function stopTimer(): void { if(interval !== null){ clearInterval(interval); } isRunning = false; } function updateTimerDisplay(): void { const minutes = Math.floor(timer / 60); const seconds = timer % 60; document.getElementById("timer")!.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`; } function logEvent(eventName: string): void { if (eventName === "Charge") { if (log.length > 0 || isRunning) { if(isRunning){ stopTimer(); } log = []; timer = 0; } startTimer(); log.push({ time: formatTime(timer), event: eventName }); updateLog(); return; } if (eventName === "Drop") { stopTimer(); log.push({ time: formatTime(timer), event: eventName }); updateLog(); document.getElementById("create-plan")!.classList.remove("hidden"); const tempButtons = document.getElementById("temp-buttons")!; tempButtons.innerHTML = ""; return; } log.push({ time: formatTime(timer), event: eventName }); updateLog(); } function resetSystem(): void { stopTimer(); log = []; updateLog(); document.getElementById("create-plan")!.classList.remove("hidden"); const tempButtons = document.getElementById("temp-buttons")!; tempButtons.innerHTML = ""; } function formatTime(seconds: number): string { const minutes = Math.floor(seconds / 60); const secs = seconds % 60; return `${minutes}:${secs.toString().padStart(2, '0')}`; } function setPlan(): void { const input = (document.getElementById("plan-input") as HTMLInputElement).value; targets = input.split(',').map(Number); currentTargetIndex = 0; document.getElementById("controls")!.classList.remove("hidden"); document.getElementById("create-plan")!.classList.add("hidden"); generateTempButtons(); } function generateTempButtons(): void { const container = document.getElementById("temp-buttons")!; container.innerHTML = ""; if (targets.length === 0) { container.innerHTML = "
No temperature plan set.
"; return; } const currentTarget = targets[currentTargetIndex]; const buttons: string[] = []; buttons.push(''); for (let i = -2; i <= 2; i++) { const temp = currentTarget + i; buttons.push(``); } buttons.push(''); container.innerHTML = buttons.join(" "); } function navigateTemp(direction: number): void { currentTargetIndex += direction; if (currentTargetIndex < 0) { currentTargetIndex = 0; } else if (currentTargetIndex >= targets.length) { currentTargetIndex = targets.length - 1; } generateTempButtons(); } function logTemp(temp: number): void { log.push({ time: formatTime(timer), event: "Temp", temp }); updateLog(); currentTargetIndex++; if (currentTargetIndex >= targets.length) { currentTargetIndex = targets.length - 1; } generateTempButtons(); } function updateLog(): void { const tbody = document.getElementById("log-body")!; tbody.innerHTML = log.map(entry => `