package Proyecto;

import java.util.Random;
import java.util.Scanner;

public class PiedraPapelTijera_V1 {
	public static void main(String[] args) {
		/*
		 * 3.1. Escribe un algoritmo que simule el juego de Piedra, Papel, Tijera. •
		 * Debe incluir: - Sistema de turnos. - Contador de victorias por jugador. -
		 * Cuando el contador de uno de los 2 jugadores sea igual a 3, no debe
		 * reproducir más partidas y debe poner quien ha ganado y quien ha perdido. •
		 * Opcionalmente: puede incluir el nombre del jugador A, el B se llamará CPU, y
		 * cuando ponga el ganador mostrar “Ha ganado {nombre jugador} / CPU”.
		 */

		// VARIABLES NECESARIAS
		Scanner sc = new Scanner(System.in);
		Random rd = new Random();
		String respuesta = "SI";

		// Nombres jugadores.
		String jugador1 = "USUARIO"; // Usuario
		String jugador2 = "CPU"; // CPU

		// Sistema de turnos.
		boolean esJugador1 = true;

		// Contador victorias
		int contadorVictorias1 = 0;
		int contadorVictorias2 = 0;

		// Contador de turnos
		int contadorTurnos = 0;

		// Elección Jugadores
		int eleccionJugador1 = 0;
		int eleccionJugador2 = 0;

		// Elección Jugadores Traducida
		String eleccionTraducidaJugador1 = "";
		String eleccionTraducidaJugador2 = "";
		
		//Variables (Globales)
		int victoriasJ1=0;
		int victoriasJ2=0;

		while (respuesta.equalsIgnoreCase("SI")) {
			
			//Por cada partida, que variables hay que reiniciar?
			contadorVictorias1=0;
			contadorVictorias2=0;
			contadorTurnos=0;
			eleccionJugador1=0;
			eleccionJugador2=0;
			esJugador1=true;
			
			
			

			// [+] Lógica de partida
			while (contadorVictorias1 < 3 && contadorVictorias2 < 3) {
				// REINICIO DE VARIABLES
				eleccionJugador1 = 0; // Se reinicia la variable

				// Solicitud de la ELECCIÓN al USUARIO

				eleccionJugador1 = obtenerEleccion();

				eleccionJugador2 = rd.nextInt(1, 4); // [1-3]

				// 1ª IDEA: En esta estructura concreta: IF es el condicional que mejor se
				// adapta.
				// [SWITCH]

				// 2ª IDEA: Obligar o forzar al usuario a que siempre nos de una opción
				// correcta.

				eleccionTraducidaJugador1 = obtenerTraduccion(eleccionJugador1);

				eleccionTraducidaJugador2 = obtenerTraduccion(eleccionJugador2);

				// Usuario ha elegido ... VS CPU ha elegido ...

				System.out.println(jugador1 + " ha elegido " + eleccionTraducidaJugador1);
				System.out.println(jugador2 + " ha elegido " + eleccionTraducidaJugador2);

				// MATCH ¿Quién gana?

				// Reglas de Juego

				// - Piedra[1] GANA A Tijera[3] OK
				// - Piedra[1] PIERDE CON Papel[2]

				// - Papel[2] GANA A Piedra[1] OK
				// - Papel[2] PIERDE CON Tijera[3]

				// - Tijera[3] GANA A Papel[2] OK
				// - Tijera[3] PIERDE CON Piedra[1] OK

				// TODAS LAS CONDICIONES EN LAS QUE J1 GANA
				if (haGanadoJ1(eleccionJugador1, eleccionJugador2)) {
					contadorVictorias1++;
					System.out.println("Gana " + jugador1);

				} // TODAS LAS CONDICINOES EN LAS QUE PIERDE

				else if (haGanadoJ1(eleccionJugador2, eleccionJugador1)) {
					contadorVictorias2++;
					System.out.println("Gana " + jugador2);
				} else {
					// EMPTATE
					System.out.println("Empate");
				}
				contadorTurnos++;

				System.out.println("\n\nESTADÍSTICAS:");
				System.out.println("Turnos Jugados: " + contadorTurnos);
				System.out.println("Victorias J1: " + contadorVictorias1);
				System.out.println("Victorias J2: " + contadorVictorias2 + "\n\n");

			}
			
			//determina quien ha ganado
			 if(contadorVictorias1==3) {
				 victoriasJ1++;
			 }else {
				 victoriasJ2++;
			 }

			// pregunta
			System.out.println("¿Quieres seguir jugando?");
			respuesta = sc.nextLine();

		}
		
		System.out.println(jugador1+" ha ganado "+victoriasJ1+" partidas ");
		System.out.println(jugador2+" ha ganado "+ victoriasJ2+" partidas ");

	}

	public static String obtenerTraduccion(int opcion) {
		if (opcion == 1) {
			return "PIEDRA";
		} else if (opcion == 2) {
			return "PAPEL";
		} else if (opcion == 3) {
			return "TIJERA";
		} else {
			return "";
		}
	}

	public static boolean haGanadoJ1(int j1, int j2) {
		return (j1 == 1 && j2 == 3) || (j1 == 2 && j2 == 1) || (j1 == 3 && j2 == 2);
	}

	public static int obtenerEleccion() {
		int eleccionJugador1 = 0;
		Scanner sc = new Scanner(System.in);

		while (eleccionJugador1 < 1 || eleccionJugador1 > 3) {
			System.out.println(" Introduce una de las tres opciones:\n" + "1. Piedra\n" + "2. Papel\n" + "3. Tijera");
			eleccionJugador1 = sc.nextInt();
		}
		return eleccionJugador1;
	}

}
