
/**
 *
 * @author Johannes Rothkegel, Juan Pablo Rothkegel Ide, Raul Cortes
 *
 * La clase Piezas es la que se encarga de hacer la relacion entre una habitación y
 * la base de datos. Ya que implementa la interfaz DataBase. Es la tabla que muestra
 * todas las habitaciones que un hotel posee.
 */


import java.util.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Piezas implements DataBase{
    private ArrayList<Pieza> piezas;

    public Piezas(){
      piezas = new ArrayList<Pieza>();
      this.refreshDataBase();

    }

    public void addPieza(Pieza p){
        piezas.add(p); //Esto añade un objeto pieza, al arreglo de piezas.
    }

    /**
    * La función showPiezas, muestra la tabla de las piezas que existen en el hotel.
    */
    public void showPiezas(){
        System.out.println("N_Piso"+"\t"+"N_Pieza"+"\t"+"Tamanno"+"\t"+"Estado"+"\t"+"Tipo");
        System.out.println("-----------------------------------------");
        for(Pieza p: piezas){
            String st;
            st = p.piso +"\t\t\t"+ p.numero_pieza +"\t\t\t"+ p.getTamanno()+"\t\t"+ p.estado+"\t\t"+ p.tipo;
            System.out.println(st);
        }
        System.out.println();
    }

    public Pieza getPieza(int id){
        for(Pieza p: piezas){
            if(p.getId()==id){
               return p;
            }
        }
        return null;
    }
    /**
    * updatePieza actualiza el estado de la pieza, esto quiere decir, si se ocupa una habitación
    * esta pasa a estar ocupada y deja de estar disponible.
    */
    public void updatePieza(int id,Pieza p){
        for(int i=0;i<piezas.size();i++){
            if(piezas.get(i).getId()==id ){
               piezas.set(i,p);
            }
        }
        writeDataBase();
    }

    public ArrayList<Pieza> getPiezaReservada(int floor){
      ArrayList<Pieza> pi = new ArrayList<Pieza>();
      for(Pieza p: piezas){
            if(p.piso==floor){
               pi.add(p);
            }
        }
      return pi;
    }


    public int getCantPiezas(){
        int i = 0;
        int piso_ant = 0;
        for(Pieza p: piezas){
            if(p.piso > piso_ant){
               piso_ant = p.piso;
               i++;
            }
        }
        return i;
    }

    public int getSize(){
      return piezas.size();
    }

    //---------------------------------------Data Base methods--------------------------------------
    public  void writeDataBase(){
       int i=0;
       try {
            FileWriter writer = new FileWriter("Pieza.txt");
            for(Pieza p: piezas){
               if(i!=0)
                  writer.write("\r\n" );
               writer.write(p.getId()+"\t"+p.piso +"\t"+ p.numero_pieza +"\t"+ p.estado+"\t"+ p.getTamanno()+"\t"+ p.tipo +"\t"+p.ubicacion);
               i++;
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

   }
   public void deleteFromDataBase(String idx){
       int id = Integer.parseInt(idx);
       for(int i=0;i<piezas.size();i++){
         Pieza p = piezas.get(i);
         if(p.getId()==id){
            piezas.remove(i);
            writeDataBase();
         }
       }
   }
   public  void refreshDataBase(){
      File file = new File("Pieza.txt");
      Scanner in=null;
      ArrayList<Pieza> per = new ArrayList<Pieza>();

      for(Pieza p: piezas){
         per.add(p);
      }
      piezas.clear();


      try{
         in = new Scanner(file);
         while(in.hasNextLine()){
            int id,p,n,t;
            String e,ti,u;
            if(in.hasNextInt())
               id = in.nextInt();
            else break;
            if(in.hasNextInt())
               p = in.nextInt();
            else break;
            if(in.hasNextInt())
               n = in.nextInt();
            else break;
            if(in.hasNext())
               e = in.next();
            else break;
            if(in.hasNextInt())
               t = in.nextInt();
            else break;
            if(in.hasNext())
               ti = in.next();
            else break;
            if(in.hasNext())
               u = in.nextLine().trim();
            else break;

            //if(id!=0)
               piezas.add(new Pieza(id,p,n,e,t,ti,u));

         }
      } catch(FileNotFoundException exception){
         System.out.println("The file " + file.getPath() + " was not found.");
         System.exit(-1);
      }
      if (in.hasNextLine())  // there was a break while reading the input file
         System.out.println("Input file format error in: "+in.nextLine());

      for(Pieza p: per){
         boolean isIn=false;
         for(Pieza pe: piezas){
            if(pe.getId()==p.getId()){
               isIn=true;
            }
         }
         if(isIn == false){
            piezas.add(p);
            writeDataBase();
         }
      }

   }
}
