import 'dart:convert'; import 'dart:math'; import 'package:flutter/services.dart'; /// Categorías disponibles en el banco de palabras class BancoPalabras { final Map> categorias; BancoPalabras(this.categorias); static BancoPalabras? _instancia; static Future cargar() async { if (_instancia != null) return _instancia!; final jsonStr = await rootBundle.loadString('assets/palabras.json'); final data = json.decode(jsonStr) as Map; final cats = data['categorias'] as Map; final mapa = >{}; for (final entrada in cats.entries) { mapa[entrada.key] = List.from(entrada.value); } _instancia = BancoPalabras(mapa); return _instancia!; } List get nombresCategorias => categorias.keys.toList(); /// Obtiene una palabra aleatoria de la categoría dada (o de todas si es null) String palabraAleatoria(String? categoria) { final rng = Random(); if (categoria == null || categoria == 'todas') { final todasPalabras = categorias.values.expand((l) => l).toList(); return todasPalabras[rng.nextInt(todasPalabras.length)]; } final lista = categorias[categoria]!; return lista[rng.nextInt(lista.length)]; } /// Devuelve la categoría a la que pertenece una palabra String? categoriaDepalabra(String palabra) { for (final entrada in categorias.entries) { if (entrada.value.contains(palabra)) return entrada.key; } return null; } static String nombreBonitoCategoria(String clave) { const nombres = { 'todas': 'Todas', 'animales': 'Animales', 'comida': 'Comida', 'paises': 'Países', 'deportes': 'Deportes', 'profesiones': 'Profesiones', 'objetos': 'Objetos', 'lugares': 'Lugares', 'peliculas': 'Películas', 'musica': 'Música', 'tecnologia': 'Tecnología', }; return nombres[clave] ?? clave; } }