package br.com.javase.jogodaforca;

import java.util.HashSet;
import java.util.Set;

import br.com.javase.jogodaforca.utils.ConsoleUtils;

public class Jogo {

	public static final int MAX_ERROS = 5;

	public void iniciar() throws JogoDaForcaException {
		Set<Character> letrasUsadas = new HashSet<>();

		int erros = 0;

		Dicionario dicionario = Dicionario.getInstance();
		Palavra palavra = dicionario.proximaPalavra();

		System.out.println("Bem vindo ao Jogo da Forca");
		System.out.println("A palavra tem " + palavra.tamanho() + " letras");

		while (true) {
			// Chama o toString()
			System.out.println(palavra);

			System.out.println();

			char letra;

			try {
				System.out.println("Digite uma letra: ");

				letra = ConsoleUtils.lerLetra();

				if (letrasUsadas.contains(letra)) {
					throw new CaractereInvalidoExeption("Esta letra já foi usada");
				}

				letrasUsadas.add(letra);

				if (palavra.possuiLetra(letra)) {
					System.out.println("Você acertou uma letra!");
				} else {
					erros++;

					if (erros < MAX_ERROS) {
						System.out.println("Você errou! você ainda pode errar " + (MAX_ERROS - erros) + " vez(es)");

					}
				}

				System.out.println();

				if (palavra.acertouPalavra()) {
					System.out.println("Parabéns! você acertou a palavra completa " + palavra.getPalavraOriginal());
					System.out.println("Fim do jogo!");

					break;
				}

				if (erros == MAX_ERROS) {
					System.out.println("Você perdeu o jogo! Palavra correta é: " + palavra.getPalavraOriginal());
					System.out.println("Fim do jogo!");

					break;
				}

			} catch (Exception e) {
				System.out.println("Erro: " + e.getMessage());
				System.out.println();
			}
		}
	}

}
