
/**
 *
 * @author Johannes Rothkegel, Juan Pablo Rothkegel Ide, Raul Cortes
 *
 * La clase PiezasReservadas es la que se encarga de hacer la relacion entre PiezaReservada y
 * la base de datos. Ya que implementa la interfaz DataBase. Esta tabla muestra todas las
 * reservas que existen.
 */


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 PiezasReservadas implements DataBase{
    private Piezas pi;
    private ArrayList<PiezaReservada> piezas;

    public PiezasReservadas(Piezas p){
      piezas = new ArrayList<PiezaReservada>();
      pi =p;
      this.refreshDataBase(); // Se refresca la base de datos, incluyendo las piezas reservadas.
    }

    public void addPiezaReservada(PiezaReservada p){
        piezas.add(p); //Se agrega una pieza reservada al arrego de piezas.
    }

    public void updatePiezaReservada(String cod, int id,PiezaReservada p){
        for(int i=0;i<piezas.size();i++){
            if(piezas.get(i).getId()==id&&piezas.get(i).getCod().equals(cod)){
               piezas.set(i,p);
            }
        }
        writeDataBase(); //Esto hace que se escriba en la base de datos.
    }

    /**
    * showPiezasReservadas es un método que muestra las piezas que están reservadas.
    */

    public void showPiezasReservadas(){
        System.out.println("N_Pieza"+"\t"+"Codigo"+"\t"+"Piso"+"\t"+"Tamanno");
        System.out.println("-----------------------------------------");
        for(PiezaReservada p: piezas){
            String st;
            Pieza pi1 = pi.getPieza(p.getId());
            st = pi1.numero_pieza+"\t"+p.getCod() +"\t"+ p.getIdPieza()+"\t"+p.getTamanno();
            System.out.println(st);
        }
        System.out.println();
    }

    public PiezaReservada getPiezaReservada(String cod, int id){
        for(PiezaReservada p: piezas){
            if(p.getId()==id&&p.getCod().equals(cod)){
               return p;
            }
        }
        return null;
    }

    public PiezaReservada getPiezaReservadaTamanno(String cod, int tam){
        for(PiezaReservada p: piezas){
            if(p.getTamanno()==tam && p.getCod().equals(cod)){
               return p;
            }
        }
        return null;
    }


    public int getSize(){
      return piezas.size();
    }
    //---------------------------------------Data Base methods--------------------------------------
    public  void writeDataBase(){
       int i=0;
       try {
            FileWriter writer = new FileWriter("PiezaReserva.txt");
            for(PiezaReservada p: piezas){
               if(i!=0)
                  writer.write("\r\n" );
               writer.write(p.getId()+"\t"+p.getCod()+"\t"+p.getTamanno()+"\t" +p.getIdPieza());
               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++){
         PiezaReservada p = piezas.get(i);
         if(p.getId()==id){
            piezas.remove(i);
            writeDataBase();
         }
       }
   }
   public  void refreshDataBase(){
      File file = new File("PiezaReserva.txt");
      Scanner in=null;
      ArrayList<PiezaReservada> per = new ArrayList<PiezaReservada>();

      for(PiezaReservada p: piezas){
         per.add(p);
      }
      piezas.clear();


      try{
         in = new Scanner(file);
         while(in.hasNextLine()){
            String cod;
            int id , tam,id_pieza;
            if(in.hasNextInt())
               id = in.nextInt();
            else break;
            if(in.hasNext())
               cod = in.next();
            else break;
            if(in.hasNextInt())
               tam = in.nextInt();
            else break;
            if(in.hasNextInt())
               id_pieza = in.nextInt();
            else break;
            if(cod!=null){
               piezas.add(new PiezaReservada(id,cod,tam,id_pieza));
            }
         }
      } 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(PiezaReservada p: per){
         boolean isIn=false;
         for(PiezaReservada pe: piezas){
            if(pe.getId()==p.getId()){
               isIn=true;
            }
         }
         if(isIn == false){
            piezas.add(p);
            writeDataBase();
         }
      }

   }
}
