
/**
 *
 * @author Johannes Rothkegel, Juan Pablo Rothkegel Ide, Raul Cortes
 *
 * La clase personas es la que se encarga de hacer la relacion entre persona y
 * la base de datos. Ya que implementa la interfaz DataBase.
 */


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 Personas implements DataBase{
    private ArrayList<Persona> persona;

    public Personas(){
      persona = new ArrayList<Persona>();
      this.refreshDataBase(); //Se refresca la base de datos con las nuevas personas que están en la base de datos.

    }

    public void addPersona(Persona p){
        persona.add(p); //Se agrega un objeto persona al arreglo.
    }

    /**
    * showPersonas está diseñada para mostrar la tabla de personas.
    */
    public void showPersonas(){
        System.out.println("Rut"+"\t"+"Nombre"+"\t"+"Apellido"+"\t"+"Direccion");
        System.out.println("---------------------------------------------");
        for(Persona p: persona){
            String st;
            st = p.getRut() +"\t"+ p.getNombre()+"\t"+ p.getApellido()+"\t"+ p.getDir();
            System.out.println(st);
        }

    }

    public Persona getPersona(String rut){
        for(Persona p: persona){
            if(p.getRut().equals(rut)){
               return p;
            }
        }
        return null;
    }


    //---------------------------------------Data Base methods--------------------------------------
    public  void writeDataBase(){
       int i=0;
       try {
            FileWriter writer = new FileWriter("Persona.txt");
            for(Persona p: persona){
               if(i!=0)
                  writer.write("\r\n" );
               writer.write(p.getRut()+"\t"+p.getNombre()+"\t"+p.getApellido()+"\t"+p.getDir()+"\t"+p.getNum());
               i++;
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

   }
   public void deleteFromDataBase(String rut){
       for(int i=0;i<persona.size();i++){
         Persona p = persona.get(i);
         if(p.getRut().equals(rut)){
            persona.remove(i);
            writeDataBase();
         }
       }
   }
   public  void refreshDataBase(){
      File file = new File("Persona.txt");
      Scanner in=null;
      ArrayList<Persona> per = new ArrayList<Persona>();

      for(Persona p: persona){
         per.add(p);
      }
      persona.clear();


      try{
         in = new Scanner(file);
         while(in.hasNextLine()){
            String r,n,a,d,nt;
            if(in.hasNext())
               r = in.next();
            else break;
            if(in.hasNext())
               n = in.next();
            else break;
            if(in.hasNext())
               a = in.next();
            else break;
            if(in.hasNext())
               d = in.next();
            else break;
            if(in.hasNext())
               nt= in.nextLine().trim();
            else break;
            if(r != ""){
               persona.add(new Persona(r,n,a,d,nt));
            }
         }
      } 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(Persona p: per){
         boolean isIn=false;
         for(Persona pe: persona){
            if(pe.getRut().equals(p.getRut())){
               isIn=true;
            }
         }
         if(isIn == false){
            persona.add(p);
            writeDataBase();
         }
      }

   }
}
