package src;


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



// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.EE16F4D2-1A95-3CF9-0BD5-85806CEE49AA]
// </editor-fold> 
public class Sucursal {

     // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.1A1A66EA-F1D8-A8C4-D502-1AA104223152]
    // </editor-fold>
    private ArrayList<Cuentas> mCuentas;
    private ArrayList<String> mCuentas2;
    private ArrayList<Movimientos> mMovimientos;
    private ArrayList<Domiciliaciones>mDomiciliaciones;

    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.8907F742-7C1B-29B5-38DB-FFF62A80884C]
    // </editor-fold>
    private ArrayList<Remesa> mRemesa;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.F32F163B-4840-BCA7-F114-76C7E814758F]
    // </editor-fold>
    public Sucursal () {
        mCuentas=new ArrayList();        
        mRemesa=new ArrayList();
        
    }
    public ArrayList<Cuentas> getCuentas () {
        return mCuentas;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.30DC03D2-12C8-9794-267B-0F3862CC5DFE]
    // </editor-fold>
    public void setCuentas (ArrayList<Cuentas> val) {
        this.mCuentas = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.218C1D65-7D8D-33BA-80B9-B63AE1BC0066]
    // </editor-fold>
    public ArrayList<Remesa> getRemesa () {
        return mRemesa;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.66B8F3CD-FC2D-54F2-B2DB-ECC0CBF98DA1]
    // </editor-fold>
    public void setRemesa (ArrayList<Remesa> val) {
        this.mRemesa = val;
    }


    
//Metodo Para leer el fichero y mostrarlo al usuario
    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.777884B9-655A-795B-4610-53F45F2636C5]
    // </editor-fold>
    public String verRemesa (String path)
    {
     String resumenRemesa="";
        try {
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea, buffer;

            while ((linea = bf.readLine()) != null) {
                buffer=linea.substring(0,4);
                if(buffer.compareTo("5180")==0){
                    //Registro cabecera presentador
                    resumenRemesa=linea.substring(28,69);
                }else if(buffer.compareTo("5680")==0){
                    //Registro individual obligatorio
                    resumenRemesa += "\n"+linea.substring(28,68);
                    resumenRemesa += "\t"+linea.substring(88,98);
                 }else if(buffer.compareTo("5980")==0){
                     //Registro total final
                    resumenRemesa += "\nTotal Remesa: "+linea.substring(88,98);
                 }
            }
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resumenRemesa;
    }

    public void incorporarRemesa (String path) throws ParseException {
        try {
            //Falta por hacer coger el numero de cuenta para luego cargarselo a telefonica
            FileReader fr = null;
            fr = new FileReader(path);
            BufferedReader bf = new BufferedReader(fr);
            String linea;
            float importe=0;
            String fechaRemesa="";
            String numCta="",ImporteTotal="";
            String concepto;
            String ordenante="";
            String numCtaOrdenante="";
            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);
                    ordenante=linea.substring(28, 68);
                    numCtaOrdenante=linea.substring(68,88); //Coger el numero de cuenta para luego cargarselo a telegfonica

                }else if(buffer.compareTo("5680")==0){
                    OPRemesa op=new OPRemesa();
                    /* El objeto DecimalFormat sirve para decirle como cojemos
                     * los numeros del texto, para decirle como vienen los numeros utilizamos la #
                      esto nos da un numero y es lo que le pasamso a df1.parse
                     */
                    DecimalFormat df1=new DecimalFormat("#######,##");
                    Number n=df1.parse(linea.substring(88, 98));
                    concepto=linea.substring(114,154);
                    op.setImporte(n.floatValue());
                    op.setConcepto(concepto);
                    SimpleDateFormat df2=new SimpleDateFormat("ddMMyy");
                    /* El objeto SimpleDateFormat sirve para decirle como cojemos
                     * la fecha del texto*/
                    /*Con el metodo parse, convierte a fecha el texto que anteriormente he
                     * recibido*/

                    op.setFecha_Operacion(df2.parse(fechaRemesa));
                    r.insertaOpRemesa(op);
                    //leo el numcta
                    numCta=linea.substring(68,88);
                    //devuelveproducto(numcta)
                    Cuentas auxCta=this.devuelveCuentas(numCta);
                    //insertarmovimientoensuproducto
                    float s= auxCta.getSaldo_cuenta();
                    importe=n.floatValue();
                    s=s-importe;
                    auxCta.setSaldo_cuenta(s);
                    auxCta.insertaMovimientoenCuenta(op);
                    incorporarDomiciliaciones(this,numCta,numCtaOrdenante,importe,ordenante);
                    
                }
                else if(buffer.compareTo("5880")==0){
                    OPRemesa op=new OPRemesa();
                    DecimalFormat df1=new DecimalFormat("#######,##");
                    Number n=df1.parse(linea.substring(88, 98));

                    op.setImporte(n.floatValue());


                    concepto=("Remesa: "+fechaRemesa);
                    op.setConcepto(concepto);
                    SimpleDateFormat df2=new SimpleDateFormat("ddMMyy");
                    op.setFecha_Operacion(df2.parse(fechaRemesa));
                    r.insertaOpRemesa(op);
                    //leo el numcta
                    numCta=linea.substring(68,88);                    
                    Cuentas auxCta=this.devuelveCuentas(numCtaOrdenante);
                    //insertarmovimientoensuproducto
                    float s= auxCta.getSaldo_cuenta();
                    importe=n.floatValue();
                    s=s+importe;
                    auxCta.setSaldo_cuenta(s);
                    auxCta.insertaMovimientoenCuenta(op);
                    
                }
            }
            this.insertaRemesaenSucursal(r);
        } catch (IOException ex) {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
        }

}
    public ArrayList<Cuentas> getMCuentas2() {
        return mCuentas;
    }

    public void setMCuentas2(ArrayList<Cuentas> mCuentas) {
        this.mCuentas = mCuentas;

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

    public Cuentas devuelveCuentas(String numcta)
    {
       
        for(int i=0; i<mCuentas.size();i++){

            if(mCuentas.get(i).getnumero_cuenta().compareTo(numcta)==0)
            {
                return mCuentas.get(i);
            }

           }

        return null;

}
    public ArrayList<String> devuelveDni(String dni)
    {
     mCuentas2=new ArrayList();
     boolean encontrado=false;
     for(int i=0; i<mCuentas.size();i++)
        {
             if(mCuentas.get(i).getId_cliente().compareToIgnoreCase(dni)==0)
             {
              mCuentas2.add(mCuentas.get(i).getnumero_cuenta());
              encontrado=true;
             }
     }
     if(encontrado==false)
            return null;
     else
            return mCuentas2;
    }


     public ArrayList<Movimientos> devuelveUltimosMovimientos(Sucursal s,String numero_cuenta)
    {
     mMovimientos=new ArrayList();
     Cuentas c=new Cuentas();
     c=s.devuelveCuentas(numero_cuenta);
         
     for( int i=c.getMovimiento().size();i>0;i--)
        {         
            mMovimientos.add(c.getMovimiento().get(i-1));
             }
            return mMovimientos;
     }

     //Metodo
    public void incorporarDomiciliaciones(Sucursal suc,String cta,String numCtaOrdenante,float imp,String ordenante)
    {
        ArrayList<Domiciliaciones> mDom;
        Cuentas c;
        Cuentas c1;   
        Domiciliaciones dom=new Domiciliaciones();
        c=this.devuelveCuentas(cta);
        c1=this.devuelveCuentas(numCtaOrdenante);       
        boolean encontrado=false;

        mDom=devuelveDomiciliaciones(suc, cta);        
        //Modifica los dos campos si la domicialiacion ya existe
        for(int i=0; i<mDom.size();i++)
        {
            if(mDom.get(i).getCIF_Empresa().compareToIgnoreCase(numCtaOrdenante)==0)
            {
                encontrado=true;
                Date fe=new Date();
                c.getDomiciliaciones().get(i).setfechaUltimoRecibo(fe);
                c.getDomiciliaciones().get(i).setimporte(imp);
            }
        }
        if (encontrado==false){//si no existe o no la encuentra la crea
            dom.setNombre_Empresa(ordenante);
            dom.setCIF_Empresa(numCtaOrdenante);
            Date f3=new Date();
            dom.setFechaAlta(f3);
            dom.setimporte(imp);
            dom.setfechaUltimoRecibo(f3);
            c.insertaDomiciliacionesCuenta(dom);
        }        
        
    }

    public ArrayList<Domiciliaciones> devuelveDomiciliaciones(Sucursal suc,String cuenta)
    {
     mDomiciliaciones=new ArrayList();
     Cuentas c=new Cuentas();
     c=suc.devuelveCuentas(cuenta);

     for( int i=0;i<c.getDomiciliaciones().size();i++)
        {
            mDomiciliaciones.add(c.getDomiciliaciones().get(i));
             }
            return mDomiciliaciones;
    }












}




