(function () { function initDashboardAdmin() { if (!window.Chart) { return; } var dataNode = document.querySelector('script[data-admin-chart="true"]'); if (!dataNode || dataNode.dataset.tsInit === '1') { return; } dataNode.dataset.tsInit = '1'; var payload; try { payload = JSON.parse(dataNode.textContent || '{}'); } catch (err) { console.error('Failed to parse admin chart payload', err); return; } window.__tsCharts = window.__tsCharts || {}; var colors = ['#7B2FF7', '#FF5ACD', '#00C9A7', '#FFB347', '#2D9CDB']; var buildPalette = function (count) { var list = []; for (var i = 0; i < count; i += 1) { list.push(colors[i % colors.length]); } return list; }; var createBarChart = function (canvasId, labels, values, valueLabel) { var canvas = document.getElementById(canvasId); if (!canvas) { return; } if (window.__tsCharts[canvasId]) { window.__tsCharts[canvasId].destroy(); } window.__tsCharts[canvasId] = new Chart(canvas, { type: 'bar', options: { indexAxis: 'y', responsive: true, maintainAspectRatio: false, scales: { x: { beginAtZero: true, ticks: { precision: valueLabel === 'Jobs' ? 0 : 2, color: '#6c757d' } }, y: { ticks: { color: '#6c757d', font: { size: 11 } } } }, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function (context) { return valueLabel + ': ' + context.raw; } } } } }, data: { labels: labels, datasets: [{ label: valueLabel, data: values, backgroundColor: buildPalette(values.length), borderRadius: 6, barThickness: 20, maxBarThickness: 24 }] } }); }; var staffData = Array.isArray(payload.staff) ? payload.staff : []; var clientData = Array.isArray(payload.clients) ? payload.clients : []; createBarChart( 'topStaffChart', staffData.map(function (item) { return item.name; }), staffData.map(function (item) { return Number(item.jobs); }), 'Jobs' ); createBarChart( 'topClientsChart', clientData.map(function (item) { return item.name; }), clientData.map(function (item) { return Number(item.hours); }), 'Hours' ); } window.__tsInitDashboardAdmin = initDashboardAdmin; window.__tsPageInits = window.__tsPageInits || []; window.__tsPageInits.push(initDashboardAdmin); })();