import { useState } from "react";
const ESTRELLAS = [1, 2, 3, 4, 5];
/**
* Muestra siempre 5 estrellas (usando el font icon de Tabler ya cargado en
* index.html, para no depender de una fuente/librería extra). Si no hay
* valoración (0, null, undefined o un valor no numérico) se muestran las
* 5 estrellas vacías en lugar de no renderizar nada.
*
* - Modo lectura (readOnly, por defecto):
con aria-label
* describiendo la puntuación, para lectores de pantalla.
* - Modo edición (onChange): botones reales con role="radio" para que sea
* utilizable con teclado y tenga foco visible.
*/
export default function StarRating({ value = 0, onChange, readOnly = false, size = 20 }) {
const [valorHover, setValorHover] = useState(0);
const esInteractivo = !readOnly && typeof onChange === "function";
const valorSeguro = Math.min(5, Math.max(0, Math.round(Number(value)) || 0));
const valorMostrado = esInteractivo && valorHover ? valorHover : valorSeguro;
const contenedorProps = esInteractivo
? { role: "radiogroup", "aria-label": "Selecciona una puntuación de 1 a 5 estrellas" }
: { role: "img", "aria-label": `Valoración: ${valorSeguro} de 5 estrellas` };
return (