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

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.50C1F1ED-C701-E2A6-D9E2-A96E3514CC71]
// </editor-fold> 
public class Partida {

    private Juego mJuego;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4D0FCF83-0AFF-9FBD-B491-3F4BEB0E7151]
    // </editor-fold> 
    private int jugadorActivo;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.1B922E97-4CEF-19AC-5424-5F2E85AA84CA]
    // </editor-fold> 
    private String nomPartida;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CCB861E1-E32D-6C6C-589C-1A824FBEEC8C]
    // </editor-fold> 
    private int numJugadores;
    
    private int numTerritorios;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.78F4148D-7CCE-10C6-84F4-F970F70C263F]
    // </editor-fold> 
    private Tablero mTablero;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.100C97CB-7D8B-03CB-4ED8-48F0C0124DF3]
    // </editor-fold> 
    private ArrayList<Jugador> mJugador;

    
    private ArrayList<Territorio> mTerritorio;
    


    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B51BC81C-3708-0BD2-0498-5B9FEE71FEAC]
    // </editor-fold> 
    public Partida () {
    }

    public Partida(String nPartida, int NumJug, Juego val){
        //mJugador=new ArrayList();
        nomPartida=nPartida;
        //BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
        numJugadores=NumJug;
        mJuego=val;
        mJugador=new ArrayList(numJugadores);
        mTerritorio=new ArrayList();
        this.creaJugadores();
        
    }
    
    public void anadirTerritorio(Territorio t){
        mTerritorio.add(t);
    }
    
    public void setNumTerritorios(int val){
        this.numTerritorios=val;
    }

    public int getNumTerritorios(){
        return this.numTerritorios;
    }
    
    public void jugar(){
        asignarPartJug(this);
        asignarPartTer(this);
        asignarTerritorios();
        muestraTerritorios();
        int terminar=1;
        int menu;
        int opcion;
        while(terminar==1){
            Jugador j=this.getJugador(this.getJugadorActivo());
            System.out.println("\nEs el turno del jugador "+j.getNombre());
            menu=0;
            while(menu==0){
                opcion=0;
                System.out.println("\n"+j.getNombre()+", ¿que deseas hacer? Elige una opcion");
                System.out.println("1.-Ubicar ejercitos. (NOTA: De momento se hará automaticamente)");
                System.out.println("2.-Transferir ejercitos.");
                System.out.println("3.-Atacar territorio enemigo.");
                System.out.println("4.-Finalizar turno.");
                System.out.print("Opcion: ");
                try{
                    BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
                    opcion=Integer.parseInt(teclado.readLine());
                }
                catch(IOException ex){
                    System.out.println(ex);
                }
                switch (opcion){
                    case 1: j.ubicarEjercitos();
                            break;
                    case 2: 
                    case 3: if(j.getNumEjercitos()>0)
                                System.out.println("\nTiene ejercitos por ubicar, por favor ubique sus ejercitos");
                            else
                                //System.out.println("Lo sentimos, esta opcion no esta operativa. Estamos trabajando en ello.");
                                j.atacarTerritorio();
                            break;
                    case 4: j.finalizarTurno();
                            menu=1;
                            break;
                }
            }
            opcion=0;
            System.out.println("\n¿Que desea hacer? Elija una opcion: ");
            System.out.println("1.-Continuar partida");
            //System.out.println("2.-Guardar partida (Se volvera al menu principal)");
            System.out.println("2.-Terminar partida (Se volvera al menu principal)");
            System.out.print("Opcion: ");
            try{
                BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
                opcion=Integer.parseInt(teclado.readLine());
            }
            catch(IOException ex){
                System.out.println(ex);
            }
            switch (opcion){
                case 1: break;
                case 2: System.out.println("Se ha acabado la partida. Gracias por jugar.");
                        mJuego.arrancarJuego();
                        terminar=3;
                        break;
            } 
        }
    }
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7B9878B8-AE71-4796-8BD1-0D98DADB384E]
    // </editor-fold> 
    public String getNomPartida () {
        return null;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.DBF47A24-82B2-EEA3-91D2-BB4A6C08C4E9]
    // </editor-fold> 
    public void setNomPartida (String val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.4FC03AD1-889B-3E30-BA07-E45B1C586BD4]
    // </editor-fold> 
    public int getNumJugadores () {
        return 0;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.263A6A77-76E1-9FFB-C3B6-E687D459C071]
    // </editor-fold> 
    public void setNumJugadores (int val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.DC66BDEF-DDE9-E684-FCE5-3714C8EC411B]
    // </editor-fold> 
    public void crearJugador () {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.AB63706E-A75D-CE2B-495B-05290583C90C]
    // </editor-fold> 
    public Dado getDado () {
        return null;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.AA3BEA16-C31D-6D12-7EB8-7AD85B52768A]
    // </editor-fold> 
    public void setDado (Dado val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.FB7F9E19-7140-00A1-9E5B-2BFFBA2B43EE]
    // </editor-fold> 
    public ArrayList<Jugador> getJugador () {
        return mJugador;
    }

    public Jugador getJugador(int val){  //Se le pasa el identificador por parametro y devuelve el jugador
        int i=val-1;
        return mJugador.get(i);
        /*int i;
        int encontrado=0;
        for(i=0;i<numJugadores && encontrado==0;i++){
            if(mJugador.get(i).getIdJugador()==val){
                encontrado=1;
            }
        }
        if(encontrado==0)
            return null;
        else
            return mJugador.get(i);*/
        
    }
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.C758D597-9651-E590-95BE-52AB19E762F7]
    // </editor-fold> 
    public Tablero getTablero () {
        return null;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0095163E-A999-58EF-DA47-C3818E1AC2F7]
    // </editor-fold> 
    public void setTablero (Tablero val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.ED23BF9A-2A07-B2D3-EC04-A76817B20863]
    // </editor-fold> 
    public int getJugadorActivo () {
        return jugadorActivo;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.D13CF139-B4E2-FE0C-254B-76A1FAE86010]
    // </editor-fold> 
    public void setJugadorActivo (int val) {
        jugadorActivo = val;
    }
    
    public void cambiarJugadorActivo()
    {
        int i =jugadorActivo+1;
        if(i>numJugadores)
            jugadorActivo=1;
        else
        jugadorActivo=i;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.4F032575-19A5-F12B-9DC6-3873377C454C]
    // </editor-fold> 
    public void setJugador (ArrayList<Jugador> val) {
        this.mJugador = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.49616FC1-A263-A3BE-026C-C0FF9F073F4B]
    // </editor-fold> this.
    public void anadirJugador (Jugador val) {
        this.mJugador.add(val);
    }
    
    public void asignarPartJug(Partida val){ //asigna un valor al atributo mPartida de cada jugador
        int i;
        for(i=0; i<numJugadores;i++)
            mJugador.get(i).setPartida(val);
    }
    
    public void asignarPartTer(Partida val){ //asigna un valor al atributo mPartida de cada territorio
        int i=0;
        for(i=0; i<numTerritorios;i++)
            mTerritorio.get(i).setPartida(val);
    }

    public void creaJugadores(){
        //BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
        //numJugadores=NumJug;
        String nombre=null;
        int i,j;
        for(i=0; i<numJugadores;i++)
        {
            j=i+1;
            try{
                BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
                System.out.println("Introduzca el nombre del jugador "+j+": ");
                nombre=teclado.readLine();   
            }
            catch( IOException ex){
                System.out.println(ex);
            }
            Jugador jug=new Jugador(40,nombre,j);
            this.anadirJugador(jug);
        }
        this.setJugadorActivo(1);
    }
    
    public ArrayList<Territorio> getTerritorio(){
        return mTerritorio;
    }
    
    public void asignarTerritorios(){ //asigna los territoris a los jugadores
        int i,j;
        for(i=1;i<=numJugadores;i++){
            ArrayList<Territorio> l=new ArrayList();
            j=i;
            while(j<=numTerritorios){
                    mTerritorio.get(j-1).setIdJugador(i);
                    l.add(mTerritorio.get(j-1));
                    j=j+numJugadores;
            }
            mJugador.get(i-1).setTerritorio(l);
        }
    }
    
    public void muestraTerritorios(){
        System.out.println("\nAsi esta el estado de los territorios");
        System.out.println("-------------------------------------");
        int i;
        for (i=0;i<numTerritorios;i++){
            Territorio aux=mTerritorio.get(i);
            String nom=mJugador.get(aux.getIdJugador()-1).getNombre();
            System.out.println(aux.getIdTerritorio()+". "+aux.getNomTerritorio() +" ("+nom+"), NE:"+aux.getNumEjercitos());
        }
    }
}

