import os

fn main() {
	mut path = 'cinderella.txt'
	if os.args.len != 2 {
		println('usage: word_counter [text_file]')
		println('using $path')
	}
	else {
		path = os.args[1]
	}
	lines := os.read_file_lines(path.trim_space())
	mut m := map[string]int{}
	for line in lines {
		words := line.to_lower().split(' ')
		for word in words {
			key := filter_word(word)
			if key == '' {
				continue
			}
			m[key] = m[key] + 1// TODO m[key]++
		}
	}
	// Sort the keys
	mut keys := []string
	for e in m.entries {
		keys << e.key
	}
	keys.sort()
	// Print the map
	for key in keys {
		val := m[key]
		println('$key => $val')
	}
}

// Removes punctuation
fn filter_word(word string) string {
	if word == '' || word == ' ' {
		return ''
	}
	mut i := 0
	for i < word.len && !is_letter(word[i]) {
		i++
	}
	start := i
	for i < word.len && is_letter(word[i]) {
		i++
	}
	end := i
	return word.substr(start, end)
}

// TODO remove once it's possible to call word[i].is_letter()
fn is_letter(c byte) bool {
	return c.is_letter()
}