package bbuvajava;



import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList; 
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.187077E3-B835-4E5A-17CB-4AE6D9869FB0]
// </editor-fold> 
public class Sucursal {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.FC507121-8C7E-376A-91E5-FDF4BE50606B]
    // </editor-fold> 
    private ArrayList<Producto> mCuenta;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.68A9A161-25F6-10E0-1236-4EC7C4B5B635]
    // </editor-fold> 
    private ArrayList<Empleado> mEmpleado;
    private ArrayList<Remesa> mRemesa;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.20BC588C-F531-D5A5-0EBF-1BA0D5A8102E]
    // </editor-fold> 
    private Caja mCaja;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.3BD1CC3D-E512-168A-64DD-1010A2F84F3D]
    // </editor-fold> 
    public Sucursal () {
        mCuenta=new ArrayList();
        mEmpleado=new ArrayList();
        mRemesa=new ArrayList();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.514E00CE-4C49-E844-724E-3B116C2CB47C]
    // </editor-fold> 
    public Caja getCaja () {
        return mCaja;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.2DB92430-8745-470F-B0FD-C87A43390684]
    // </editor-fold> 
    public void setCaja (Caja val) {
        this.mCaja=val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.13DA2AFF-A758-DFF8-237F-1B056D99E970]
    // </editor-fold> 
    public ArrayList<Producto> getCuenta () {
        return mCuenta;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.43AD52BB-F5C0-7574-A863-03B8485B819A]
    // </editor-fold> 
    public void setCuenta (ArrayList<Producto> val) {
        this.mCuenta=val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.8678D9E7-B794-7CE1-0284-04FC2F033917]
    // </editor-fold> 
    public ArrayList<Empleado> getEmpleado () {
        return mEmpleado;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.1B08BF33-EA49-DF1A-AE0F-F05C30F5F4DB]
    // </editor-fold> 
    public void setEmpleado (ArrayList<Empleado> val) {
        this.mEmpleado=val;
    }
    
    public String verRemesa (String path) throws FileNotFoundException, IOException {
       String resumenRemesa="";
        try {
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea;
            while((linea=bf.readLine())!=null){
                if(linea.substring(0,4).compareTo("5180")==0){
                    //me devuelve los 5 primeros caracteres de la línea
                    //leo el presentador
                    resumenRemesa=linea.substring(28, 68)+"\n";
                }else if(linea.substring(0, 4).compareTo("5680")==0){
                    resumenRemesa+=linea.substring(28,68)+"\t"+linea.substring(88, 98)+"\n";

                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }
       return resumenRemesa;
        }

    /**
     * @return the mRemesa
     */

    public void incorporarRemesa (String path) throws ParseException {
        try {
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea;
            String fechaRemesa="";
            String numCta="";
            Remesa r=new Remesa();
            while ((linea = bf.readLine()) != null) {
                String buffer;
                buffer = linea.substring(0, 4);

                if(buffer.compareTo("5180")==0){
                    //registro cabecera presentador

                    r.setNombreOrdenante(linea.substring(28,68));
                }else if(buffer.compareTo("5380")==0){
                    fechaRemesa=linea.substring(22, 28);
                }else if(buffer.compareTo("5680")==0){
                    OpRemesa op=new OpRemesa();
                    DecimalFormat df1=new DecimalFormat("#######,##");
                    Number n=df1.parse(linea.substring(88, 98));
                    op.setImporte(n.floatValue());
                    op.setConcepto(r.getNombreOrdenante());
                    SimpleDateFormat df2=new SimpleDateFormat("ddMMyy");
                    op.setFechaOperacion(df2.parse(fechaRemesa));
                    r.insertaOpRemesa(op);
                    //leo el numcta
                    numCta=linea.substring(68,88);
                    //devuelveproducto(numcta)
                    Producto auxCta=this.devuelveCuenta(numCta);
                    //insertarmovimientoensuproducto
                    auxCta.insertaMovimientoenCuenta(op);
                }

            }
            this.insertaRemesaenSucursal(r);
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }

}
    public void insertaRemesaenSucursal(Remesa r){
        this.mRemesa.add(r);
    }

    public void insertaProductoenSucursal(Producto p){
        this.mCuenta.add(p);
    }
    public Producto devuelveCuenta(String numcta){

        Iterator iterador = this.mCuenta.listIterator();

        while( iterador.hasNext() ) {
            Producto c = (Producto) iterador.next();
            if (c.getNumeroCuenta().compareTo(numcta)==0){
                return c;
            }

        }
        return null;

}
    //Actualiza un cuenta
    public void actualizaCuenta(Producto c){
        Iterator iterador=this.mCuenta.listIterator();
        boolean actualizado=false;

        while ((actualizado==false) || (iterador.hasNext())){
            Producto cuen=(Producto) iterador.next();
            if(c.getNumeroCuenta().compareTo(cuen.getNumeroCuenta())==0){
                actualizado=true;
                int indice=mCuenta.indexOf(cuen);
                mCuenta.set(indice, c);
            }
        }
    }
    
    //Dado un identificador devuelve el titular al que pertenece
    public Titular devuelveTitular(String identificador){
        Titular t=new Titular();
        ArrayList<Titular> titulares;
        Iterator it=mCuenta.listIterator();
        Iterator it2;
        boolean encontrado=false;

        while ((it.hasNext()) && (encontrado==false)){
            Producto p=(Producto) it.next();
            titulares=p.getTitular();
            it2=titulares.listIterator();
            while ((it2.hasNext()) && (encontrado==false)){
                Titular ti=(Titular) it2.next();
                if (ti.getNumIdent().compareTo(identificador)==0)
                {
                    encontrado=true;
                    t=ti;
                }
            }
        }

        return t;
    }
    //Comprueba que el identificador de un usuario existe en la sucursal
    public boolean existeIdentificador(String id){
        boolean valido=false;
        Iterator iterador=this.mCuenta.listIterator();
        ArrayList <Titular> t;
        Iterator iterador2;

        while ((iterador.hasNext()) & (valido==false)){
            Producto c=(Producto) iterador.next();
            t=c.getTitular();
            iterador2=t.listIterator();
            while ((iterador2.hasNext()) & (valido==false)){
                Titular ti=(Titular) iterador2.next();
                if (ti.getNumIdent().compareTo(id)==0)
                    valido=true;
            }
        }

        return valido;
    }

    
    //Devuelve la lista de cuentas de un titular
    //introduciendo el número de identificación de éste
    public ArrayList<Producto> devuelveCuentasTitular(String numIdent){

        ArrayList<Producto> cuentas=new ArrayList(); //lista de cuentas de un titular
        ArrayList<Titular> titulares=new ArrayList();
        Iterator iterador=this.mCuenta.listIterator();
        Iterator iterador2;
        //cuentas=null;
        while (iterador.hasNext()){
            Producto c= (Producto) iterador.next(); //mCuenta es la lista de cuentas
                                                //de la sucursal
            //Recorremos mCuenta y vamos extrayendo las cuentas
            //de una en una y las guardamos temporalmente
            //en c

            titulares=c.getTitular();  //Lista de titulares de una cuenta
            iterador2=titulares.listIterator();
            while (iterador2.hasNext()){
                Titular t=(Titular) iterador2.next();
                if(t.getNumIdent().compareTo(numIdent)==0){
                    cuentas.add(c);
                }
            }

        }
        return cuentas;
    }

    public boolean existeCuenta(String cuenta){
        boolean existe=false;
        Iterator it = mCuenta.listIterator();
        Producto p;

        while ((existe==false) & (it.hasNext())){
            p=(Producto) it.next();
            if (p.getNumeroCuenta().compareTo(cuenta)==0)
                existe=true;
        }
        return existe;
    }

    public ArrayList<Remesa> getMRemesa() {
        return mRemesa;
    }

    /**
     * @param mRemesa the mRemesa to set
     */
    public void setMRemesa(ArrayList<Remesa> mRemesa) {
        this.mRemesa = mRemesa;
    }

    


}

