import java.util.ArrayList; 
import java.io.*;
// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.87B45317-FB11-DA8E-4BF8-8F3975FE4E4D]
// </editor-fold> 
public class Jugador {

    private int idJugador;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.12C9C19C-30E7-B7D8-6797-CF1088C69EE7]
    // </editor-fold> 
    private Partida mPartida;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B2B6D814-958D-A046-83BA-70C14FE423D2]
    // </editor-fold> 
    private int numEjercitos;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.53B8BA4C-D201-04E0-830D-2A761F8FA65C]
    // </editor-fold> 
    private String nombre;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.FD3420E0-E390-9ADE-4FFF-094DED8D6603]
    // </editor-fold> 
    private Carta_Mision mCarta_Mision;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.21FDBD7B-7A2D-DA68-3028-9171D334EEA1]
    // </editor-fold> 
    private ArrayList<Carta_Territorio> mCarta_Territorio;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.573DB772-DF00-6CC6-8135-A57751394B3D]
    // </editor-fold> 
    private ArrayList<Territorio> mTerritorio;
    private int numTerritorios;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.193F1C92-226A-D1F6-BBBF-F13D2273A37A]
    // </editor-fold> 
    public Jugador () {
    }

    public Jugador(int numEjer, String nom, int id){
        numEjercitos=numEjer;
        nombre=nom;
        idJugador=id;
       // mPartida=val;
    }
    
    public Jugador(Jugador j){
        this.nombre=j.getNombre();
        this.numEjercitos=j.getNumEjercitos();
    }
    public int getnumTerritorios(){
        return numTerritorios;
    }
    public void setnumTerritorios(){
        numTerritorios++;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.371650CA-5B67-148F-5892-7665205F178B]
    // </editor-fold> 
    public int getNumEjercitos () {
        return numEjercitos;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.0EB2599D-EFB1-AD57-77AD-55A0DA8D05FB]
    // </editor-fold> 
    public void setNumEjercitos (int val) {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.F666CDD4-7BAF-0FD9-752F-B2F1F588CE4F]
    // </editor-fold> 
    public Carta_Mision getCarta_Mision () {
        return mCarta_Mision;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.BF63CDA9-1445-203C-3325-7A21680AEB86]
    // </editor-fold> 
    public ArrayList<Carta_Territorio> getCarta_Territorio () {
        return mCarta_Territorio;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.DC535877-5BA8-7D94-2C21-C1B05C317743]
    // </editor-fold> 
    public void setCarta_Territorio (ArrayList<Carta_Territorio> val) {
        this.mCarta_Territorio = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.2B9172DD-5F6F-9D83-EE12-A9464CB132D4]
    // </editor-fold> 
    public ArrayList<Territorio> getTerritorio () {
        return mTerritorio;
    }
    public Territorio getTerritorio(int idt){
       boolean dev=false;
       int i;
       Territorio t=null;
       for(i=0;i<mPartida.getNumTerritorios() && dev==false;i++){
          Territorio t1=mPartida.getTerritorio().get(i);
          if(t1.getIdTerritorio()==idt){
             dev=true;
             t=t1;
          }
       }
       return t;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.8DC34B73-6816-99E8-22B1-8E5C4B923F75]
    // </editor-fold> 
    public void setTerritorio (ArrayList<Territorio> val) {
        this.mTerritorio = val;
        numTerritorios=mTerritorio.size();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.69895A14-2CA4-1F20-B4F0-9693D370E3AA]
    // </editor-fold> 
    public String getNombre () {
        return nombre;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.2D49BB75-1404-8B3A-574A-4B635E4D6DC8]
    // </editor-fold> 
    public void setNombre (String val) {
        this.nombre = val;
    }
 
    
    public void setCarta_Mision (Carta_Mision val) {
        this.mCarta_Mision = val;
    }
    
    public void finalizarTurno () {
        System.out.println("Soy el jugador "+this.nombre+". He terminado mi turno.\n"); 
        mPartida.cambiarJugadorActivo();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.6F9C923B-E71D-8228-9723-556C2C71EEAB]
    // </editor-fold> 
    public Partida getPartida () {
        return mPartida;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.3ED7DED1-7807-50C3-45D7-23ACEA6DA72E]
    // </editor-fold> 
    public void setPartida (Partida val) {
        this.mPartida = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C6ECC7B0-F6F4-6D44-AD10-FE3614E8F0F0]
    // </editor-fold> 
    public void ubicarEjercitos () {
        int i=0;
        int j=0;
        while(numEjercitos>0){
            mTerritorio.get(i).aumentarNumEjercitos(1);
            numEjercitos=numEjercitos-1;
            i++;
            if(i==numTerritorios)
                i=0;  
        }
        mPartida.muestraTerritorios();
        System.out.println("\nYa no quedan ejercitos por ubicar.");
    }
    
    public boolean PoseoTerritorio(int idt){
       boolean dev=false;
       int i;
       for(i=0;i<numTerritorios && dev==false;i++){
          if(mTerritorio.get(i).getIdTerritorio()==idt){
             dev=true;
          }
       }
       return dev;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C89952CF-AC89-A5F5-45F9-CC4F1275EEA5]
    // </editor-fold> 
    public void atacarTerritorio () {
        mPartida.muestraTerritorios();
        BufferedReader teclado= new BufferedReader(new InputStreamReader(System.in));
        int idTerr1=0,idTerr2=0;
        int nejAt=0,nejDe=0; 
        int[] lat,lde;
        
        Territorio terr1=null,terr2=null;
        boolean b=false;
        do{
           try{
                System.out.println("Introduzca el identificador del territorio atacante: ");
                idTerr1=Integer.parseInt(teclado.readLine());
                b=this.PoseoTerritorio(idTerr1);
                //nejerc=this.getTerritorio(idTerr1).getNumEjercitos();
                if(b==false)
                    System.out.println("El territorio introducido no le pretenece, introduzca otro");
                else{
                    Territorio aux=this.getTerritorio(idTerr1);
                    nejAt=aux.getNumEjercitos();
                    if(nejAt>1){
                        terr1=aux;
                    }
                    else
                        System.out.println("El territorio elegido no tiene suficientes ejercitos para atacar, introduzca otro.");
                }
           }
           catch(IOException e){
             System.out.println(e);
           }
        }while(b==false || nejAt==1);
        terr1.mostrarTerrAdy();
        do{
            try{
               System.out.println("Introduzca el identificador del territorio atacado: ");
               idTerr2=Integer.parseInt(teclado.readLine());
               b=PoseoTerritorio(idTerr2);
               if(b==true)
                System.out.println("El territorio introducido le pretenece, introduzca otro");
               else{
                   Territorio aux=mPartida.getTerritorio().get(idTerr2-1);
                   nejDe=aux.getNumEjercitos();
                   if(terr1.adyacente(idTerr2)==true){
                        terr2=aux;
                   }
                   else
                       System.out.println("El territorio que desea atacar no es adyacente, introduzca otro");
               }
            }
           catch(IOException e){
               System.out.println(e);
           }
        }while(b==true || terr1.adyacente(idTerr2)==false);// AQUI FALTA VER SI EL TERRITORIO ES CONTIGUO
        
        Dado d=new Dado();
        if(nejAt>=3){
            lat=d.getTirada(3);
            if(nejDe>=2)
              lde=d.getTirada(2);
            else
              lde=d.getTirada(1);
        }
        else{
            if(nejDe>=2){
                lat=d.getTirada(1);
                lde=d.getTirada(2);
            }
            else{
                lat=d.getTirada(2);
                lde=d.getTirada(1);
            }
        }
        System.out.println("Tirada de ataque del territorio "+terr1.getNomTerritorio()+":");
        System.out.println("-----------------");
        int i;
        for(i=0;i<lat.length;i++)
            System.out.println("Dado "+(i+1)+" :"+lat[i]);
        System.out.println("Tirada de defensa del territorio "+terr2.getNomTerritorio()+":");
        System.out.println("-----------------");
        for(i=0;i<lde.length;i++)
            System.out.println("Dado "+(i+1)+" :"+lde[i]);
        int[] disminuye=d.comparar(lat, lde);
        System.out.println("El territorio "+terr1.getNomTerritorio()+" pierde "+disminuye[0]+" ejercitos.");
        System.out.println("El territorio "+terr2.getNomTerritorio()+" pierde "+disminuye[1]+" ejercitos.");
        terr1.disminuirNumEjercitos(disminuye[0]);
        terr2.disminuirNumEjercitos(disminuye[1]);
        if(terr2.getNumEjercitos()==0){
            System.out.println("\nSe ha conquistado el territorio "+terr2.getNomTerritorio());
            invadirTerritorio();
        }
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.90E9EFA7-0AED-7580-1988-EABEA30248F7]
    // </editor-fold> 
    public void invadirTerritorio () {
        System.out.println("\nLa opcion de invadir territorio aun no esta implementada");
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.840B6385-AEFF-085B-0FBE-ECA7239C3B06]
    // </editor-fold> 
    public void terminarAtaque () {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.03876686-AE2E-BDC9-7157-0E60350C0C9A]
    // </editor-fold> 
    public void transferirEjercitos () {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.BA2BFEBC-A035-D85B-B2C0-C516660C4DC5]
    // </editor-fold> 
    public void verCarta () {
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C3D121FB-E2C5-8A08-8CA3-04CF014727CC]
    // </editor-fold> 
    public void cambiarCartas () {
    }

    public int getIdJugador(){
        return idJugador;
    }
    
    public void setIdjugador(int val){
        idJugador=val;
    }
    
    
}

