import { MODES, PK_MODELS, CLINICAL_THRESHOLDS, generateSimulationData } from '../../pkCore.js'; import { generatePDFReport } from './pdfExport.js'; let currentMode = MODES.ESKETAMINE; let pkChart = null; // Initialisation de la Grille Saisie (61 intervalles de 5 min) const timelineInputs = Array.from({ length: 61 }, (_, i) => ({ time: i * 5, bolusMg: 0, perfRateMgKgH: 0 })); document.addEventListener('DOMContentLoaded', () => { initChart(); renderTimelineGrid(); setupEventListeners(); updateSimulation(); }); function initChart() { const ctx = document.getElementById('pkChart').getContext('2d'); pkChart = new Chart(ctx, { type: 'line', data: { labels: timelineInputs.map(d => `${d.time}'`), datasets: [] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, max: CLINICAL_THRESHOLDS[currentMode].maxScale, title: { display: true, text: 'Cp (ng/mL)', color: '#94a3b8' }, grid: { color: 'rgba(51, 65, 85, 0.3)' } }, x: { title: { display: true, text: 'Temps (minutes)', color: '#94a3b8' }, grid: { color: 'rgba(51, 65, 85, 0.3)' } } }, plugins: { legend: { labels: { color: '#f8fafc' } } } } }); } function updateSimulation() { const weight = parseFloat(document.getElementById('inputWeight').value) || 70; const datasets = []; if (document.getElementById('chkDomino').checked) { datasets.push({ label: PK_MODELS.DOMINO.name, data: generateSimulationData({ model: PK_MODELS.DOMINO, weightKg: weight, timelineInputs }), borderColor: PK_MODELS.DOMINO.color, borderWidth: 3, tension: 0.2 }); } if (document.getElementById('chkClements').checked) { datasets.push({ label: PK_MODELS.CLEMENTS.name, data: generateSimulationData({ model: PK_MODELS.CLEMENTS, weightKg: weight, timelineInputs }), borderColor: PK_MODELS.CLEMENTS.color, borderWidth: 3, tension: 0.2 }); } if (document.getElementById('chkKamp').checked) { datasets.push({ label: PK_MODELS.KAMP.name, data: generateSimulationData({ model: PK_MODELS.KAMP, weightKg: weight, timelineInputs }), borderColor: PK_MODELS.KAMP.color, borderWidth: 3, tension: 0.2 }); } pkChart.data.datasets = datasets; pkChart.options.scales.y.max = CLINICAL_THRESHOLDS[currentMode].maxScale; pkChart.update(); } function renderTimelineGrid() { const container = document.getElementById('timelineGrid'); container.innerHTML = ''; timelineInputs.forEach((item, idx) => { const col = document.createElement('div'); col.className = 'flex-1 bg-slate-900 border border-slate-700/60 rounded-xl p-2 text-center text-xs flex flex-col gap-1.5'; col.innerHTML = `