import java.util.ArrayList; 
import java.io.*;
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.CD68C416-3CE4-9775-6CFF-5BB4111252DA]
// </editor-fold> 
public class Juego {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.50D8067D-58EC-EEA1-B32E-013981F0B9E6]
    // </editor-fold> 
    private ArrayList<Dado> lDados;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A89402AE-7897-586A-0C92-E5B799AD188C]
    // </editor-fold> 
    private Partida nPartida;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.266925AB-9F9A-AD08-DD04-19DB8E1EF464]
    // </editor-fold> 
    private Tablero nTablero;
    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.05CE5EAE-0ED7-C9AD-0E46-4C2E140855C9]
    // </editor-fold> 
    public Juego () {
        
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.011F174A-3678-FE22-8C30-CA82969A6AA5]
    // </editor-fold> 
    /*public ArrayList<Partida> getPartida () {
        return lPartidas;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.69A68BFB-6525-BEFE-08A3-93059E7D2528]
    // </editor-fold> 
    public void setPartida (ArrayList<Partida> val) {
        this.lPartidas = val;
    }*/

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.1EA37CAA-A29F-44C8-B057-BE70C0EB2BDC]
    // </editor-fold> 
    /*public ArrayList<Tablero> getTablero () {
        return lTableros;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.D5BE1CF2-70DD-DF15-96B2-0AE86DFAEA57]
    // </editor-fold> 
    public void setTablero (ArrayList<Tablero> val) {
        this.lTableros = val;
    }*/

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7E417C00-C9D9-143B-DEE8-4294A7E6D0AE]
    // </editor-fold> 
    public ArrayList<Dado> getDado () {
        return lDados;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.BEC9B041-2CE5-FEDE-D3CB-70BFC079AC56]
    // </editor-fold> 
    public void setDado (ArrayList<Dado> val) {
        this.lDados = val;
    }
    
    public void asignarPartida(Partida val){
        nPartida=val;
    }

    public void anadirDado(Dado val){
        
    }
    
    public void anadirTablero(Tablero val){
        
    }
    
    public void cargarCartas(Partida p){
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        
        try { 
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File ("C:\\cartas.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero
            String nomCarta, tipo;
            int id, numCartas;
            numCartas=Integer.parseInt(br.readLine());
            int i;
            for(i=0; i<numCartas; i++){
                nomCarta=br.readLine();
                id=Integer.parseInt(br.readLine());
                tipo=br.readLine();
                Carta_Territorio c=new Carta_Territorio(nomCarta, tipo, id);
                p.anadirCarta(c);
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }finally{
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try{                    
                if( null != fr ){   
                    fr.close();     
                }                  
            }
            catch (Exception e2){ 
                e2.printStackTrace();
            }
        }
    }
    
    public void cargardatos(Partida p){
        
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        Tablero tab=new Tablero();
        
        try { 
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File ("C:\\territorios.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero
            String nombreTerr, nombreCont;
            int idTer, numAdy, idCont;
            int numTerr, numCont, nTC, nBonif;
            numTerr=Integer.parseInt(br.readLine());
            numCont=Integer.parseInt(br.readLine());
            p.setNumTerritorios(numTerr);
            p.setNumContinentes(numCont);
            int i;
            for(i=0; i<numCont; i++){
                nombreCont=br.readLine();
                idCont=Integer.parseInt(br.readLine());
                nBonif=Integer.parseInt(br.readLine());
                nTC=Integer.parseInt(br.readLine());
                Continente c=new Continente(nombreCont, idCont, nBonif, nTC);
                int j;
                for(j=0; j<nTC; j++){
                    nombreTerr=br.readLine();
                    idTer=Integer.parseInt(br.readLine());
                    Territorio t=new Territorio (nombreTerr,idTer,0);
                    numAdy=Integer.parseInt(br.readLine());
                    t.setNumAdyacentes(numAdy);
                    int[]lAdy=new int[numAdy];
                    int k;
                    for(k=0;k<numAdy;k++){
                        lAdy[k]=Integer.parseInt(br.readLine());
                    }
                    t.setlAdyacentes(lAdy);
                    p.anadirTerritorio(t);
                    c.anadirTerritorios(t);
                }
                p.anadirContinente(c);
            }   
        }  
        catch(Exception e){
            e.printStackTrace();
        }finally{
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try{                    
                if( null != fr ){   
                    fr.close();     
                }                  
            }
            catch (Exception e2){ 
                e2.printStackTrace();
            }
      
        }
      }
    
    public void arrancarJuego(String nPartida, int numJugadores){
        /*int salir=0;
        System.out.println("BIENVENIDO A LA PRIMERA VERSION DEL CARIBE-RISK");
        System.out.println("_______________________________________________\n\n");
        while(salir==0){
            System.out.println("Menu principal");
            System.out.println("______________\n");
            System.out.println("Elija una opcion: ");
            System.out.println("1.-Comenzar nueva partida.");
            System.out.println("2.-Continuar partida ya creada.");
            System.out.println("3.-Salir de la aplicacion.");
            System.out.println("Opcion:");
            int opcion=0;
            BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
            try{
                opcion=Integer.parseInt(teclado.readLine());
            }
            catch(IOException ex){
                System.out.println(ex);
            }
            switch (opcion){
                case 1: String nPartida=null;
                        int numJugadores=0;
                        int control=0;
                        try{
                            System.out.println("Por favor, introduzca el nombre de la partida: ");
                            nPartida=teclado.readLine();
                        }
                        catch(IOException e){
                            System.out.println(e);
                        }
                        while(control==0){
                            try{
                                System.out.println("Por favor introduzca el numero de jugadores: " );
                                numJugadores=Integer.parseInt(teclado.readLine());
                            }
                            catch(IOException ex){
                                System.out.println(ex);
                            }
                            if (numJugadores<2 || numJugadores>6){
                                System.out.println("Lo sentimos, por favor introduzca un numero de jugadores mayor que dos y menor que 6.");
                            }
                            else{
                                control=1;
                            }
                        } */
                        Partida p = new Partida(nPartida,numJugadores, this);
                        this.asignarPartida(p);
                        this.cargardatos(p);
                        this.cargarCartas(p);
                        //p.jugar();
                        /*break;
                case 2: System.out.println("Lo sentimos, esta opcion no esta operativa. Estamos trabajando en ello. "); 
                        break;
                case 3: System.out.println("Gracias por jugar al Risk de Piratas del Caribe.");
                        salir=1;
                        //System.gc();
                        break;*/
           // }
       // }
    }
    
    /*public static void main(String[] args) throws IOException{
        Juego j=new Juego();
        //j.cargardatos(p);
        //j.arrancarJuego();
    }*/

    public Partida getNPartida() {
        return nPartida;
    }

    public void setNPartida(Partida nPartida) {
        this.nPartida = nPartida;
    }

    public Tablero getNTablero() {
        return nTablero;
    }

    public void setNTablero(Tablero nTablero) {
        this.nTablero = nTablero;
    }
}

