// src/components/common/SenadoresNacionalesLayout.tsx import React from 'react'; import type { PartidoComposicionNacional } from '../../apiService'; // Interfaces interface SenadoresNacionalesLayoutProps { partyData: PartidoComposicionNacional[]; size?: number; presidenteBancada?: { color: string | null } | null; } const PRESIDENTE_SEAT_INDEX = 0; export const SenadoresNacionalesLayout: React.FC = ({ partyData, size = 800, presidenteBancada, }) => { // --- ARRAY DE 73 ELEMENTOS ORDENADOS POR ID DE "seat-X" --- // El asiento 0 es el presidencial, los 72 restantes son los senadores. const seatElements = [ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]; let seatIndex = 1; // Empezamos desde 1 porque el 0 es para el presidente return ( {/* Renderizamos primero el escaño del presidente por separado */} {presidenteBancada && React.cloneElement(seatElements[PRESIDENTE_SEAT_INDEX], { fill: presidenteBancada.color || '#A9A9A9', strokeWidth: 0.5, })} {/* Mapeamos los partidos para crear los bloques */} {partyData.map(partido => { const partySeats = [ ...Array(partido.bancasFijos).fill({ isNew: false }), ...Array(partido.bancasGanadas).fill({ isNew: true }) ]; return ( {partySeats.map((seatInfo, i) => { if (seatIndex >= seatElements.length) return null; const template = seatElements[seatIndex]; seatIndex++; return React.cloneElement(template, { key: `${partido.id}-${i}`, className: 'seat-circle', fill: partido.color || '#808080', fillOpacity: seatInfo.isNew ? 1 : 0.3, stroke: partido.color || '#808080', strokeWidth: 0.5, }); })} ); })} {/* Renderizamos escaños vacíos si sobran */} {seatIndex < seatElements.length && seatElements.slice(seatIndex).map((template, i) => React.cloneElement(template, { key: `empty-${i}`, fill: '#E0E0E0', stroke: '#ffffff', strokeWidth: 0.5 }) ) } ); };