'use client' import React from 'react' interface DetectorDataPoint { value: number label?: string timestamp?: string status?: string } interface DetectorChartProps { className?: string data?: DetectorDataPoint[] type?: 'line' | 'bar' } const DetectorChart: React.FC = ({ className = '', data, type = 'line' }) => { if (type === 'bar') { const defaultBarData = [ { value: 85, label: 'Янв' }, { value: 70, label: 'Фев' }, { value: 90, label: 'Мар' }, { value: 65, label: 'Апр' }, { value: 80, label: 'Май' }, { value: 95, label: 'Июн' } ] const barData = (Array.isArray(data) && data.length > 0) ? data.slice(0, 6).map((d, i) => ({ value: d.value || 0, label: d.label || defaultBarData[i]?.label || `${i + 1}` })) : defaultBarData return (
{barData.map((bar, index) => { const barWidth = 50 const barSpacing = 15 const x = index * (barWidth + barSpacing) + 20 const barHeight = (bar.value / 100) * 150 const y = 160 - barHeight return ( {bar.label} ) })}
) } // Line chart implementation const defaultLineData = [ { value: 150 }, { value: 120 }, { value: 100 }, { value: 80 }, { value: 90 }, { value: 70 }, { value: 60 } ] const lineData = (Array.isArray(data) && data.length > 0) ? data.slice(0, 7) : defaultLineData const maxVal = Math.max(...lineData.map(d => d.value || 0), 1) const width = 400 const height = 200 const padding = 20 const plotHeight = height - 40 const stepX = lineData.length > 1 ? (width - 2 * padding) / (lineData.length - 1) : 0 const points = lineData.map((d, i) => { const x = padding + i * stepX const y = height - padding - ((d.value || 0) / maxVal) * plotHeight return { x, y } }) const linePath = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(' ') const areaPath = `${linePath} L${width - padding},${height - padding} L${padding},${height - padding} Z` return (
{points.map((p, i) => ( ))}
) } export default DetectorChart