
/**
 *
 * @author Johannes Rothkegel, Juan Pablo Rothkegel Ide, Raul Cortes
 *
 * Reservas Personas, es la clase que se encarga de anidar la reserva con una persona respectiva
 * y así poder mostrar luego por pantalla, que habitaciones están disponibles para el cliente.
 *
 */


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 ReservasPersona implements DataBase{
    private Personas personas;
    private ArrayList<Reserva> reservas;


    public ReservasPersona(Personas p){
      personas = p;
      reservas = new ArrayList<Reserva>();
      this.refreshDataBase();
    }
    /**
    * addReserva añade una reserva al arreglo, si es que ya existe muestra un mensaje de error.
    * Se puede dar el caso que una persona no tenga reserva y se quiera intentar de agregar igual
    * al arreglo, lo cual igual envía un mensaje de error.
    */
    public void addReserva(Reserva p){
        Persona per = personas.getPersona(p.getRut());
        Reserva res = (this).getReservaId(p.getId());
        if(per!=null){
         if(res==null)
            reservas.add(p);
         else System.out.println("<-- Error! Codigo de Reserva ya existente -->");
        }
        else System.out.println("<-- Error al ingresar Reserva, no existe persona con rut "+ p.getRut() +" -->");
    }

    public Reserva getReservaId(String id){
         for(Reserva r: reservas){
            if(r.getId().equals(id))
               return r;
         }
         return null;
    }

    public Reserva getReservaRut(String rut){
         for(Reserva r: reservas){
            if(r.getRut().equals(rut))
               return r;
         }
         return null;
    }
    /**
    * showReservas es un método que se encarga de mostrar la tabla de reservas.
    */
    public void showReservas(){
        System.out.println("Nombre"+"\t"+"CodigoReserva"+"\t"+"Desde"+"\t\t\t"+"Hasta");
        System.out.println("---------------------------------------------");
        for(Reserva p: reservas){
            String st;
            Persona per = personas.getPersona(p.getRut());
            if(per!=null)
               st = per.getNombre() +"\t"+ p.getId()+"\t\t\t"+p.desde+"\t"+p.hasta;
            else st = "<-- Error, no existe persona con rut"+ p.getRut() +" -->";
            System.out.println(st);
        }
        System.out.println();
    }

    //---------------------------------------Data Base methods--------------------------------------

    public  void writeDataBase(){
       int i=0;
       try {
            FileWriter writer = new FileWriter("Reserva.txt");
            for(Reserva p: reservas){
               if(i!=0)
                  writer.write("\r\n" );
               writer.write(p.getId()+"\t"+p.getRut()+"\t"+p.desde+"\t"+p.hasta);
               i++;
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

   }
   public void deleteFromDataBase(String id){
       for(int i=0;i<reservas.size();i++){
         Reserva p = reservas.get(i);
         if(p.getId().equals(id)){
            reservas.remove(i);
            writeDataBase();
         }
       }
   }
   public  void refreshDataBase(){
      File file = new File("Reserva.txt");
      Scanner in=null;
      ArrayList<Reserva> per = new ArrayList<Reserva>();

      for(Reserva p: reservas){
         per.add(p);
      }
      reservas.clear();


      try{
         in = new Scanner(file);
         while(in.hasNextLine()){
            String r,id,d,h;
            if(in.hasNext())
               id = in.next();
            else break;
            if(in.hasNext())
               r = in.next();
            else break;
            if(in.hasNext())
               d = in.next();
            else break;
            if(in.hasNext())
               h = in.nextLine().trim();
            else break;
            if(id != ""){
               reservas.add(new Reserva(id,r,d,h));
            }
         }
      } 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(Reserva p: per){
         boolean isIn=false;
         for(Reserva pe: reservas){
            if(pe.getId().equals(p.getId())){
               isIn=true;
            }
         }
         if(isIn == false){
            reservas.add(p);
            writeDataBase();
         }
      }

   }



}
