import 'dart:async';
import 'dart:convert';

import 'package:flutter/services.dart';

import 'package:wordguessing/models/word.dart';
import 'package:wordguessing/utils/tools.dart';

class RandomPickWords {
  RandomPickWords();

  List<Word> _words = [];

  init(String lang, int count) async {
    await wordsFromLocalFile(lang, count);
  }

  Future<void> wordsFromLocalFile(String lang, int count) async {
    List<Word> wordList = [];

    try {
      final String jsonString = await rootBundle.loadString('assets/words.json');
      final jsonResponse = await json.decode(jsonString);
      final Map<String, dynamic> wordsMap = jsonResponse['words'] as Map<String, dynamic>;

      wordsMap.forEach((key, data) {
        final List<String> images = [];
        for (var image in (data['images'] as List<dynamic>)) {
          images.add(image as String);
        }

        images.shuffle();

        if (images.isNotEmpty) {
          wordList.add(Word(
            key: key,
            text: data[lang] ?? '',
            images: images,
          ));
        }
      });
    } catch (e) {
      printlog("$e");
    }

    // Check we have enough words
    if (wordList.length < count) {
      printlog('Not enough words in list.');
    }

    // Remove empty words
    wordList.removeWhere((word) => (word.text == ''));

    // Randomize words list
    wordList.shuffle();

    // Pick first words from shuffled list
    _words = wordList.take(count).toList();
  }

  List<Word> get words => _words;
}