package prjPersonagem;

import java.util.Random;
import java.util.Scanner;

public class Personagem {
	private String nome;
	private String classe;
	private int vida;
	private int mana;
	private boolean morto;
	private int pontos;
	private int qtPocao;
	private boolean necroAmigo;

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return this.nome;
	}

	public void setClasse(String classe) {
		this.classe = classe;
	}

	public String getClasse() {
		return this.classe;
	}

	public void setVida(int vida) {
		this.vida = vida;
	}

	public int getVida() {
		return this.vida;
	}

	public void setMana(int mana) {
		this.mana = mana;
	}

	public int getMana() {
		return this.mana;
	}

	public void setMorto(boolean morto) {
		this.morto = morto;
	}

	public boolean getMorto() {
		return this.morto;
	}

	public void setPontos(int pontos) {
		this.pontos = pontos;
	}

	public int getPontos() {
		return this.pontos;
	}

	public void setQtPocao(int qtPocao) {
		this.qtPocao = qtPocao;
	}

	public int getQtPocao() {
		return this.qtPocao;
	}

	public void setNecroAmigo(boolean necroAmigo) {
		this.necroAmigo = necroAmigo;
	}

	public boolean getNecroAmigo() {
		return this.necroAmigo;
	}

	public void Menu() {
		Scanner ler = new Scanner(System.in);
		vida = 100;
		mana = 100;
		qtPocao = 5;
		morto = false;
		System.out.println(
				"Instruções:\n+Siga os comandos para realizar as ações;\n+Você começa com 5 poções que lhe concedem 20 de vida e de mana/energia;\n"
						+ "+Cuidado ao usar a poção, mesmo estando com tudo cheio, você bebe a poção!;\n"
						+ "+Cada inimigo abatido lhe concede 1 ponto;\n"
						+ "+Você também recupera 1 de vida e 1 de mana/energia a cada inimigo eliminado;\n"
						+ "+Há chances de você encontrar uma poção em corpos de inimigos mortos;\n"
						+ "+Faça o maior número de pontos possíveis;\n" + "+Divirta-se!\n");
		System.out.println("Qual o nickname do seu personagem?");
		nome = ler.nextLine();
		VerificarClasse();
	}

	public void VerificarClasse() {
		Scanner ler2 = new Scanner(System.in);
		do {
			System.out.println("Escolha uma classe: ([E]spadachim, [C]lérigo, [N]ecromante)");
			classe = ler2.next().toUpperCase();
			if (!"E".equals(classe) && !"C".equals(classe) && !"N".equals(classe)) {
				System.out.println("Classe não existente! Digite 'E','C' ou 'N'!");
			}
		} while (!"E".equals(classe) && !"C".equals(classe) && !"N".equals(classe));

		if ("E".equals(classe))
			System.out.println("Você escolheu Espadachim!\n");

		if ("C".equals(classe))
			System.out.println("Você escolheu Clérigo!\n");

		if ("N".equals(classe)) {
			System.out.println("Você escolheu Necromante!\n");
			necroAmigo = false;
		}
	}

	public void MenuAcao() {
		Scanner ler3 = new Scanner(System.in);
		String op;
		do {
			System.out.println("Escolha uma ação: \n1-Tomar poção!\n2-Duelar!\n3-Especial!\n4-Ver status!\n5-Sair.");
			op = ler3.nextLine();
			switch (op) {
			case "1":
				TomarPocao();
				break;
			case "2":
				Duelar();
				break;
			case "3":
				Especial();
				break;
			case "4":
				VerStatus();
				break;
			case "5":
				System.out.println("Você fugiu, você fez: " + pontos + " pontos!");
				System.exit(0);
				break;
			default:
				System.out.println("Ação não existe!!\n");
				break;
			}
		} while (op != "5" && morto == false);
		ler3.close();
	}

	public void TomarPocao() {
		System.out.println("===== ===== ===== ===== =====");
		if (qtPocao == 0)
			System.out.println("Você não possui mais poções!");

		if (qtPocao > 0) {
			qtPocao--;
			if (vida > 100)
				System.out.println("Sua aura permite que você exceda a vida máxima!");
			else if (vida >= 80 && vida <= 100) {
				vida = 100;
				System.out.println("Você está com a Vida cheia!");
			}
			if (mana >= 80) {
				if (!"E".equals(classe)) {
					mana = 100;
					System.out.println("Você está com a Mana cheia!");
				} else {
					mana = 100;
					System.out.println("Você está com a Energia cheia!");
				}
			}
			if (vida <= 79) {
				vida += 20;
				System.out.println("Você recuperou 20 de Vida!");
			}

			if (mana <= 79) {
				if (!"E".equals(classe)) {
					mana += 20;
					System.out.println("Você recuperou 20 de Mana!");
				} else {
					mana += 20;
					System.out.println("Você recuperou 20 de Energia!");
				}
			}
			
			if (!"E".equals(classe))
				System.out.println("Vida: " + vida + " Mana: " + mana);
			else
				System.out.println("Vida: " + vida + " Energia: " + mana);
		}
		System.out.println("Poções: " + qtPocao + "\n");
	}

	public void Duelar() {
		Random r = new Random();
		int dano = r.nextInt(40);
		int nPocao = r.nextInt(10) + 1;
		boolean critico = false;

		if (dano % 2 != 0 && dano >= 32 && dano <= 36) {
			dano *= 2;
			critico = true;
		}

		if (necroAmigo) {
			System.out.println("===== ===== ===== ===== =====");
			System.out.println("Sua invocação foi morta após eliminar um inimigo!");
			necroAmigo = false;
			pontos++;
			vida++;
			mana++;
		} else {
			if (critico) {
				vida = vida - dano;
				System.out.println("===== ===== ===== ===== =====");
				System.out.println("Você encontrou e matou um inimigo, mas recebeu " + dano + " de dano CRÍTICO!");
				if (vida < 0) {
					vida = 0;
					System.out.println("Sua vida: " + vida);
					System.out.println("Você morreu! X_X");
					morto = true;
				} else
					System.out.println("Sua vida: " + vida);
				pontos++;
				vida++;
				mana++;
			} else {
				vida = vida - dano;
				System.out.println("===== ===== ===== ===== =====");
				System.out.println("Você encontrou e matou um inimigo, mas recebeu " + dano + " de dano!");
				if (vida < 0) {
					vida = 0;
					System.out.println("Sua vida: " + vida);
					System.out.println("Você morreu! X_X");
					morto = true;
				} else
					System.out.println("Sua vida: " + vida);
				pontos++;
				vida++;
				mana++;
			}
		}

		if (nPocao == 1 && morto == false) {
			System.out.println("VOCÊ ENCONTROU UMA POÇÃO!");
			qtPocao++;
		}

		if (morto == false)
			System.out.println("Poções: " + qtPocao + "\n");
		
		if (morto) {
			System.out.println(nome + ", você fez " + pontos + " ponto(s)!");
		}
	}

	public void Especial() {
		System.out.println("===== ===== ===== ===== =====");
		if ("E".equals(classe)) {
			if (mana < 20)
				System.out.println("Você não tem Energia o suficiente!\n");
			else {
				mana -= 20;
				System.out.println("[-20 de Energia] Você corta todos os inimigos da área!");
				System.out.println("Sua Energia: " + mana + "\n");
				pontos += 2;
			}
		}

		if ("C".equals(classe)) {
			if (mana < 45)
				System.out.println("Você não tem Mana o suficiente!\n");
			else {
				mana -= 45;
				vida += 25;
				System.out.println("[-45 de Mana] Você ativa uma aura que lhe concede mais 25 de vida!");
				System.out.println("Sua Mana: " + mana + "\n");
			}
		}

		if ("N".equals(classe)) {
			if (mana < 60)
				System.out.println("Você não tem Mana o suficiente!\n");
			else {
				mana -= 60;
				System.out.println("[-60 de Mana] Você revive um inimigo para lutar ao seu lado!");
				necroAmigo = true;
				System.out.println("Sua Mana: " + mana + "\n");
				pontos += 3;
			}
		}
	}

	public void VerStatus() {
		String cl = "";
		if ("E".equals(classe))
			cl = "Espadachim";
		if ("C".equals(classe))
			cl = "Clérigo";
		if ("N".equals(classe))
			cl = "Necromante";

		System.out.println("===== ===== ===== ===== =====");
		System.out.println("Seu nickname: " + nome);
		System.out.println("Sua classe: " + cl);
		System.out.println("Quantidado de poções: " + qtPocao);
		System.out.println("Vida: " + vida);
		
		if ("E".equals(classe))
			System.out.println("Energia: " + mana);
		else
			System.out.println("Mana: " + mana);
		System.out.println("===== ===== ===== ===== =====\n");
	}
}