extends Node


const MIN_LENGTH := 5
const MAX_LENGTH := 5
const GENERABLE_WORDS_FILENAME = "res://words/popular-filtered.txt"
const ALL_WORDS_FILENAME := "res://words/enable1.txt"


var daily_mode := true


var generable_words: Dictionary
var all_words: Dictionary


func _ready() -> void:
	randomize()
	generable_words = parse_words(GENERABLE_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH)
	all_words = parse_words(ALL_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH)


func parse_words(filename: String, min_len: int, max_len: int) -> Dictionary:
	var dict := {}
	for i in range(min_len, max_len + 1):
		dict[i] = []

	var file := File.new()
	var error := file.open(filename, File.READ)
	assert(not error)
	while not file.eof_reached():
		var line := file.get_line()
		var length = line.length()
		if length < min_len || length > max_len:
			continue
		dict[length].append(line.to_upper())
	file.close()

	return dict


func generate_word(length: int, random_seed = null) -> String:
	var random_value: int
	if typeof(random_seed) == TYPE_INT:
		var rng = RandomNumberGenerator.new()
		rng.set_seed(random_seed)
		random_value = rng.randi()
	else:
		random_value = randi()

	var words_list := generable_words[length] as Array

	return words_list[random_value % words_list.size()]


func is_valid_word(word: String) -> bool:
	var length := word.length()
	if length < MIN_LENGTH or length > MAX_LENGTH:
		return false

	var words_list := all_words[length] as Array

	return word.to_upper() in words_list