import java.util.Iterator; //Importo la interfaz Iterator para iterar el arrayList
import java.util. ArrayList; //Importo la clase ArrayList para poder usar la lista

import java.io.*;
import java.util.*;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.F0CE4925-3F0E-D285-07DC-6B057EF93111]
// </editor-fold> 
public class Partida {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B91B3CB9-21E5-3CE3-4ED0-A6206C678AD4]
    // </editor-fold> 
    int num; //Variable para leer desde teclado
   
    
    
  

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.274F8437-4CB0-3DF0-456E-C93A0E6AE8B8]
    // </editor-fold> 
    private int Derrota;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CD823F63-14AA-CF1D-A86C-33AF66B48D54]
    // </editor-fold> 
    private ArrayList<Jugador> mJugador;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.E7297EC0-09DC-B480-DA9B-FBA181BDF696]
    // </editor-fold> 
    private Tablero mTablero;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.336B1A30-6164-11E9-A31A-B2A9DC1D9BA9]
    // </editor-fold> 
    private Dados mDados;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B01C6725-CFAD-9CE4-B46A-72DF987DBB7A]
    // </editor-fold> 
    private Partida mPartida;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.DB6CA9C9-ABCA-30B8-267A-0C8E5B493CA3]
    // </editor-fold> 
    private Dados mDados1;
    private int NumJugadores;

    /**
     *  Jugadores del turno
     */
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.F1551984-BD2C-5DF4-4439-56D8D75409E6]
    // </editor-fold> 
    public Partida (Jugador J1, Jugador J2, Jugador J3,Tablero tab) {
     NumJugadores=3;
     mJugador = new ArrayList();
     mJugador.add(J1);
     mJugador.add(J2);
     mJugador.add(J3);
     mTablero=tab;
     
     int opc=0;
     while(opc!=4){
            System.out.println(" ");
            System.out.println("Juego del RISK");
            System.out.println("--------------");
            System.out.println("    1. Nueva Partida");
            System.out.println("    2. Cargar Partida");
            System.out.println("    3. Guardar Partida");
            System.out.println("    4. Salir Partida");
            System.out.println("Elegir opción: ");
            
            opc=leer();
            System.out.println("El numero es " +opc);
            switch (opc){
             case 1:   
                // if (mTablero.getTerritorios().get(12).validarAtaque(22)==true)
                // System.out.println(mTablero.getTerritorios().get(12).getNombreTerritorio()+" Es Vecino de: "+mTablero.getTerritorios().get(22-1).getNombreTerritorio());    
                 NuevaPartida();
                 
             break;
             case 2:
                 CargarPartida();
             break;
             case 3:
                 GuardarPartida();
             break;
             case 4:
                 SalirPartida();
             break;
             default: System.out.println("No es una opción válida!");
             break;
            }
              
     }

    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.E9602A53-886C-CB97-091A-D56F415C1C91]
    // </editor-fold> 
    public void Jugar (int modalidad) {
        System.out.println("Según modalidad aqui se darian una serie de datos importantes");
        boolean Fin=false;
        int i=0;
        int ter=0,teratak1=0,teratak2=0,ejer=0;
        
        repartirEjercitos();
        repartirTerritorios();
        
        
        
        while(Fin!=true){
            Iterator lista_jugadores = mJugador.iterator();
        while(lista_jugadores.hasNext()) {
            
            String opc="";
            while(!opc.equals("6")){
            System.out.println(" ");
            System.out.println("Turno de: "+mJugador.get(i).getColor());
            System.out.println("--------------");
            System.out.println("    1. Colocar Ejercitos");
            System.out.println("    2. Atacar");
            System.out.println("    3. Ver Cartas");
            System.out.println("    4. Ver Mis Territorios");
            System.out.println("    5. Ver Mis Ejercitos Pendientes");
            System.out.println("    6. Terminar Turno");
            System.out.println("    7. Terminar Partida ");
            System.out.println("Elegir opción: ");
            opc=leerCadena();
            
            switch (opc.hashCode()){
                case '1':
                    
                    System.out.println("Seleccione el territorio");
                    ter=leer();
                    System.out.println("Cuantos Ejercitos? ");
                    ejer=leer();
                    mJugador.get(i).annadirEjercito(ter,ejer);
                    
                        
                   
                    break;
                case '2':
                    System.out.println("Seleccione su territorio");
                    teratak1=leer();
                    System.out.println("Seleccione el territorio que quiere invadir");
                    teratak2=leer();
                    mJugador.get(i).atacar(teratak1,mTablero.getTerritorios().get(teratak2-1));
                    break;
                case '3':
                    System.out.println("Aqui se verian las cartas del jugador ");
                    break;
                case '4':
                    mJugador.get(i).verTerritorios();
                    break;
                case '5':
                    System.out.println("Ejercitos Pendientes: " +mJugador.get(i).getNumEjercitos());
                    break;
                case '6':
                   System.out.println("El jugador a terminado el turno");
                    break;
                case '7':
                    SalirPartida ();
                    break;
             default: System.out.println("No es una opción válida!");
                    break;
            }
            
            
            }
            if(i==NumJugadores-1){
                i=0;
                
            }
            else
                i++;
            

        }
        }

       
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.25DC8A19-D421-0362-AC24-380A8DA2FA3B]
    // </editor-fold> 
    public int getDerrota () {
        return 0;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.80102F7C-78D4-F1FA-93CD-FA6A9D3B4814]
    // </editor-fold> 
    public void setDerrota (int val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.8BBEC06B-3E59-80FC-F32E-706394AFBCCB]
    // </editor-fold> 
    public char getModalidad () {
        return 'a';
    }

    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.ACB60142-E4BE-FB1D-F0C0-4DE6C20A1437]
    // </editor-fold> 
    public Jugador getTurno () {
        return null;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.09D88742-F140-5F70-EA97-73B98BA1FC8F]
    // </editor-fold> 
    public void setTurno (Jugador val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.47A35DBE-11EE-53D5-B483-0DB246655257]
    // </editor-fold> 
    public void CargarPartida () {
        System.out.println("Aqui se cargaría una partida guardada ");
        System.out.println("En proceso de creación ");
        
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.ACA73C7C-FB55-C37D-EC34-A628A4075846]
    // </editor-fold> 
    public void GuardarPartida () {
        System.out.println("Aqui se guardaría una partida  ");
        System.out.println("En proceso de creación ");
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.6EEC388C-67A8-8B76-0957-DD421FAF2FCF]
    // </editor-fold> 
    public void SalirPartida () {
        System.out.println("Fin de partida ");
        System.exit(1);
       
        
    }
    public void repartirEjercitos(){
        Iterator lista_jugadores = mJugador.iterator();
        int i =0;
        while(lista_jugadores.hasNext()&&i<NumJugadores) {
        mJugador.get(i).inicioNumEjercitos(NumJugadores); 
        i++;
        }
    }
    public void repartirTerritorios () {
        Iterator lista_jugadores = mJugador.iterator();
        int i =0;
        int id=0;
        while(lista_jugadores.hasNext() && mTablero.territorioLibre()==true) {
        boolean correcto=true;    
        do{    
        System.out.println("Elige un territorio jugador "+mJugador.get(i).getColor());
        id=leer();
        
        if (mTablero.getTerritorios().get(id-1).getLibre()==true){
            mTablero.getTerritorios().get(id-1).setLibre(false);
            mTablero.getTerritorios().get(id-1).setnumEjercitos(1);
            mJugador.get(i).setTerritorios(mTablero.getTerritorios().get(id-1));
            mJugador.get(i).setNumTerritorios();
            mJugador.get(i).disNumEjercitos(1);
            correcto=true;
        }
        else{
            System.out.println("Este territorio ya tiene dueño ");
            correcto=false;
        }
        }while(correcto==false);   
            
        
        
        if(i==NumJugadores-1){
          i=0;
          }
        else
          i++;
            
        }
   }
    


    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.FC6A4E65-A354-BF3E-61C8-4C30D8C64B49]
    // </editor-fold> 
    public void NuevaPartida () {
        //Aqui le decimos los datos de la partida nueva
        /*Número de Jugadores
          Modalidad de Juego
         */
       int opcm;
        System.out.println("Elegir modalidad");
        System.out.println("    1. Dominación");
        System.out.println("    2. Mision");
        System.out.println("    3. Capital");
        System.out.println("Elegir opción: ");
        opcm=leer();
        System.out.println("El numero es " +opcm);
        switch (opcm){
             case 1:
                 
                 Jugar(1);  //Jugar en modo dominacion
             break;
             case 2:
                 Jugar(2);  //Jugar en modo mision
             break;
             case 3:
                 Jugar(3);  //Jugar en modo Capital
             break;
            
             default: System.out.println("No es una opción válida!");
             break;       
        }
        
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.6F9E2AF0-DC00-3B26-A9BD-A2FC5684B84B]
    // </editor-fold> 
    public int leer (){
        
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1);
        try {
            num = Integer.parseInt(br.readLine());
        }
        catch (IOException ex) {
         System.out.println(ex);
        }
       return num;
       
    
    }
    
     

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.8C728FCB-7554-1568-1D8C-5C6E4AC739C0]
    // </editor-fold> 
    public Dados getDados () {
        return mDados;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.145A064C-36BB-A1E0-E3F8-C3CA8C7B54C5]
    // </editor-fold> 
    public void setDados (Dados val) {
        this.mDados = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.AF703D4A-FC3D-2B42-B81B-6563F1DA812A]
    // </editor-fold> 
    public Dados getDados1 () {
        return mDados1;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.016231C0-553F-C686-27C8-673083EB67CE]
    // </editor-fold> 
    public void setDados1 (Dados val) {
        this.mDados1 = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.6FEB6A73-5061-7F2E-EFDA-DF8289297825]
    // </editor-fold> 
    public ArrayList<Jugador> getJugador () {
        return mJugador;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.198B54F1-8930-241B-F79F-38357F4DD2F4]
    // </editor-fold> 
    public void setJugador (ArrayList<Jugador> val) {
        this.mJugador = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0AA5612C-CE55-6178-D888-EE428B3F3658]
    // </editor-fold> 
    public Partida getPartida () {
        return mPartida;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.265CDB25-AF35-85C4-27F9-B740C364413D]
    // </editor-fold> 
    public void setPartida (Partida val) {
        this.mPartida = val;
    }
    public String leerCadena (){
       String cadena="";
      
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1);
        try {
            cadena =br.readLine();
        }
        catch (IOException ex) {
         System.out.println(ex);
        }
       return cadena;
       
    
    }
    
    public static void main(String[] args){
    
    System.out.println("Se crea por defecto 2 jugadores (Azul y Rojo)");
    System.out.println("En sucesivas modificaciones se elegirá el numero de jugadores (2-8)");
    System.out.println(" ");
     
     ArrayList<Territorios> mTerritorios1=new ArrayList();
     Territorios ter1=new Territorios("Australia Oriental",1); 
     Territorios ter2=new Territorios("Indonesia",2);
     Territorios ter3=new Territorios("Nueva Guinea",3);
     Territorios ter4=new Territorios("Australia Occidental",4);
     mTerritorios1.add(ter1);
     mTerritorios1.add(ter2);
     mTerritorios1.add(ter3);
     mTerritorios1.add(ter4);
     ter1.ponerVecinos(4, 3,  0, 0, 0, 0);
     ter2.ponerVecinos(4, 3,  22, 0, 0, 0);
     ter3.ponerVecinos(1, 2,  4, 0, 0, 0);
     ter4.ponerVecinos(1, 3,  2, 0, 0, 0);
     
     ArrayList<Territorios> mTerritorios2=new ArrayList();
     Territorios ter5=new Territorios("Congo",5); 
     Territorios ter6=new Territorios("Africa Oriental ",6);
     Territorios ter7=new Territorios("Egipto",7);
     Territorios ter8=new Territorios("Madagascar ",8);
     Territorios ter9=new Territorios("Africa del Norte ",9);
     Territorios ter10=new Territorios("Sudafrica ",10);
     ter5.ponerVecinos(9, 6, 10, 0, 0, 0);
     ter6.ponerVecinos(7, 9, 5, 10, 8, 0);
     ter7.ponerVecinos(9, 6, 27, 17, 0, 0);
     ter8.ponerVecinos(10, 2, 0, 0, 0, 0);
     ter9.ponerVecinos(7, 6, 5, 27, 29, 31);
     ter10.ponerVecinos(5, 6, 8, 0, 0, 0);
     mTerritorios2.add(ter5);
     mTerritorios2.add(ter6);
     mTerritorios2.add(ter7);
     mTerritorios2.add(ter8);
     mTerritorios2.add(ter9);
     mTerritorios2.add(ter10);
     ArrayList<Territorios> mTerritorios3=new ArrayList();
     Territorios ter11=new Territorios("Afghanistan",11); 
     Territorios ter12=new Territorios("China",12);
     Territorios ter13=new Territorios("India",13);
     Territorios ter14=new Territorios("Irkutsk",14);
     Territorios ter15=new Territorios("Japon",15);
     Territorios ter16=new Territorios("Kamchatka",16);
     Territorios ter17=new Territorios("Oriente Medio",17);
     Territorios ter18=new Territorios("Mongolia",18);
     Territorios ter22=new Territorios("Siam",22);
     Territorios ter19=new Territorios("Siberia",19);
     Territorios ter20=new Territorios("Ural",20);
     Territorios ter21=new Territorios("Yakutsk",21);
     ter11.ponerVecinos(20, 16, 17, 13, 12, 0);
     ter12.ponerVecinos(22, 13, 11, 18, 20, 0);
     ter13.ponerVecinos(22, 12, 11, 17,  0, 0);
     ter14.ponerVecinos(21, 16, 19, 18, 0, 0);
     ter15.ponerVecinos(16, 18, 0, 0, 0, 0);
     ter16.ponerVecinos(21, 15, 14, 18, 0, 0);
     ter17.ponerVecinos(13, 11, 28, 7, 0, 0);
     ter18.ponerVecinos(14, 16, 15, 12, 19, 0);
     ter19.ponerVecinos(21, 14, 18, 12, 20, 0);
     ter20.ponerVecinos(11, 12, 19, 28, 0, 0);
     ter21.ponerVecinos(16, 14, 19, 0, 0, 0);
     ter22.ponerVecinos(2, 12, 13, 0, 0, 0);
     mTerritorios3.add(ter11);
     mTerritorios3.add(ter12);
     mTerritorios3.add(ter13);
     mTerritorios3.add(ter14);
     mTerritorios3.add(ter15);
     mTerritorios3.add(ter16);
     mTerritorios3.add(ter17);
     mTerritorios3.add(ter18);
     mTerritorios3.add(ter19);
     mTerritorios3.add(ter20);
     mTerritorios3.add(ter21);
     mTerritorios3.add(ter22);
     
     ArrayList<Territorios> mTerritorios4=new ArrayList();
     Territorios ter23=new Territorios("Gran Bretaña",23); 
     Territorios ter24=new Territorios("Iceland",24);
     Territorios ter25=new Territorios("Europa del Norte",25);
     Territorios ter26=new Territorios("Escandinavia",26);
     Territorios ter27=new Territorios("Europa del Sur",27);
     Territorios ter28=new Territorios("Ucrania",28);
     Territorios ter29=new Territorios("Europa Occidental",29);
     ter23.ponerVecinos(24, 29, 25, 26, 0, 0);
     ter24.ponerVecinos(23, 26, 38, 0, 0, 0);
     ter25.ponerVecinos(26, 23, 29, 27, 28, 0);
     ter26.ponerVecinos(23, 24, 25, 28, 0, 0);
     ter27.ponerVecinos(25, 28, 7, 9, 0, 0);
     ter28.ponerVecinos(26, 25, 27, 17, 11, 20);
     ter29.ponerVecinos(23, 25, 27, 9, 0, 0);
     mTerritorios4.add(ter23);
     mTerritorios4.add(ter24);
     mTerritorios4.add(ter25);
     mTerritorios4.add(ter26);
     mTerritorios4.add(ter27);
     mTerritorios4.add(ter28);
     mTerritorios4.add(ter29);
     
     
     ArrayList<Territorios> mTerritorios5=new ArrayList();
     Territorios ter30=new Territorios("Cono Sur",30); 
     Territorios ter31=new Territorios("Brasil",31);
     Territorios ter32=new Territorios("Peru",32);
     Territorios ter33=new Territorios("Colombia y Venezuela",33);
     ter30.ponerVecinos(31, 32, 0, 0, 0, 0);
     ter31.ponerVecinos(30, 32, 33, 9, 0, 0);
     ter32.ponerVecinos(30, 31, 33, 0, 0, 0);
     ter33.ponerVecinos(32, 31, 36, 0, 0, 0);
     mTerritorios5.add(ter30);
     mTerritorios5.add(ter31);
     mTerritorios5.add(ter32);
     mTerritorios5.add(ter33);
     
     ArrayList<Territorios> mTerritorios6=new ArrayList();
     Territorios ter34=new Territorios("Alaska",34); 
     Territorios ter35=new Territorios("Alberta",35);
     Territorios ter36=new Territorios("America Central",36);
     Territorios ter37=new Territorios("Estados Unidos del Este",37);
     Territorios ter38=new Territorios("Groenlandia",38);
     Territorios ter39=new Territorios("Territorios del Noroeste",39);
     Territorios ter40=new Territorios("Ontario",40);
     Territorios ter41=new Territorios("Quebec",41);
     Territorios ter42=new Territorios("Estados Unidos del Oeste ",42);
     ter34.ponerVecinos(39, 35, 16, 0, 0, 0);
     ter35.ponerVecinos(34, 39, 41, 37, 42,0);
     ter36.ponerVecinos(42, 37, 33, 0, 0, 0);
     ter37.ponerVecinos(36, 42, 35, 40, 41, 0);
     ter38.ponerVecinos(24, 41, 40, 39, 0, 0);
     ter39.ponerVecinos(34, 35, 40, 38, 0, 0);
     ter40.ponerVecinos(39, 35, 42, 37, 41, 38);
     ter41.ponerVecinos(38, 40, 37, 0, 0, 0);
     ter42.ponerVecinos(36, 42, 35, 40, 0, 0);
     mTerritorios6.add(ter34);
     mTerritorios6.add(ter35);
     mTerritorios6.add(ter36);
     mTerritorios6.add(ter37);
     mTerritorios6.add(ter38);
     mTerritorios6.add(ter39);
     mTerritorios6.add(ter40);
     mTerritorios6.add(ter41);
     mTerritorios6.add(ter42);
     
     ArrayList<Continentes> mContinentes=new ArrayList();
     Continentes australia=new Continentes(1,mTerritorios1);
     Continentes africa=new Continentes(2,mTerritorios2);
     Continentes asia=new Continentes(3,mTerritorios3);
     Continentes europa=new Continentes(4,mTerritorios4);
     Continentes americaS=new Continentes(5,mTerritorios5);
     Continentes americaN=new Continentes(6,mTerritorios6);
     mContinentes.add(asia);
     mContinentes.add(australia);
     mContinentes.add(africa);
     mContinentes.add(europa);
     mContinentes.add(americaS);
     mContinentes.add(americaN);
     ArrayList<Territorios> todos=new ArrayList();
     todos.addAll(mTerritorios1);
     todos.addAll(mTerritorios2);
     todos.addAll(mTerritorios3);
     todos.addAll(mTerritorios4);
     todos.addAll(mTerritorios5);
     todos.addAll(mTerritorios6);
     Tablero tab=new Tablero(42,mContinentes,todos);
     
     
    Jugador J1=new Jugador("Azul");
    Jugador J2=new Jugador("Rojo");
    Jugador J3=new Jugador("Amarillo");
    Partida p=new Partida(J1,J2,J3,tab);
    
}

}

