package javacgc;


import java.io.BufferedReader;
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.Date;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
//import java.util.Date;




// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.9C47D96A-1F58-ECBE-7EC8-79E3D52BF320]
// </editor-fold> 
public class Sucursal {

private ArrayList<Cliente> mCliente;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.CCE7B794-EEC2-E51D-090A-EF54668557D7]
    // </editor-fold>
    private ArrayList<Producto> mProducto;

    private String ncta="0000000001";;

    private String numofic="2098400214";

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.E01E5E9F-EBE7-C7F6-06A3-276488D66B9B]
    // </editor-fold>
    private ArrayList<Remesa> mRemesa;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.797F1DEF-10ED-2F15-35DE-913EC5F8AED3]
    // </editor-fold> 
    private Caja mCaja;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.855754AD-4B99-C6C8-EDF0-EA45074BFEF9]
    // </editor-fold> 
    private Empleado mEmpleado;


    public Sucursal () {
        mCliente=new ArrayList<Cliente>();
        mProducto=new ArrayList<Producto>();
        mRemesa=new ArrayList<Remesa>();
    }

     public void setRemesa (ArrayList<Remesa> val) {
        this.mRemesa = 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,id=DCE.5A8E0943-C2B7-EBB0-BED1-2561BAEDAB0E]
    // </editor-fold> 
    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.85F3FA6B-738A-2B3D-AB68-B7154C719990]
    // </editor-fold> 
    public Caja getCaja () {
        return mCaja;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.881F96D8-CA5A-3CF8-2C0F-160B01B8E5AA]
    // </editor-fold> 
    public void setCaja (Caja val) {
        this.mCaja = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0195F2F6-44FA-7E3C-758C-F4FE29CC7301]
    // </editor-fold> 
    public Empleado getEmpleado () {
        return mEmpleado;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7F5D756F-909D-9CB9-51D6-5B8E2DA0B172]
    // </editor-fold> 
    public void setEmpleado (Empleado val) {
        this.mEmpleado = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.608BD037-6484-FC95-407E-FB60B1D3FA95]
    // </editor-fold> 
    public ArrayList<Producto> getProducto () {
        return mProducto;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.226D8FCE-4245-D189-4E95-4F82BE9B8F25]
    // </editor-fold>
    public void setProducto (ArrayList<Producto> val) {
        this.mProducto = val;
    }
    public Producto devuelveProducto(String numcta){

        Iterator iterador = this.mProducto.listIterator();

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

        }
        return null;
                                                   }
   



    public String verRemesa (String path) {
        if(path==null){return null;}
       else{
        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;
    }
    }
    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.F68A8278-4F50-7C25-5F67-3AD08FB3712A]
    // </editor-fold>
    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){
                    OpRemesas op=new OpRemesas();
                    DecimalFormat df1=new DecimalFormat("#######,##");
                    Number n=df1.parse(linea.substring(88, 98));
                    op.setImporte(-(int) n.floatValue());
                    op.setConceptoAmpliado(r.getNombreOrdenante());
                    op.setConceptobreve("Remesa");
                    SimpleDateFormat df2=new SimpleDateFormat("ddMMyy");
                    op.setFechaOperacion(df2.parse(fechaRemesa));
                    op.setId(Movimiento.idsc++);
                    r.insertaopremesa(op);
                    //leo el numcta
                    numCta=linea.substring(68,88);

                     //devuelveproducto(numcta)
                    Producto auxCta=this.devuelveProducto(numCta);
                    //insertarmovimientoensuproducto
                    if(auxCta!=null){ auxCta.insertaMovimientoenCuenta(op);}
                    //auxCta.insertaMovimientoenCuenta(op);

                    Cliente c=this.buscarCliente(r.getNombreOrdenante());
                    Domiciliacion d= new Domiciliacion(auxCta,c);
                    auxCta.insertardomic(d);

                   
                }

            }
            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 ArrayList<Cliente> getMCliente() {
        return mCliente;
    }

    /**
     * @param mCliente the mCliente to set
     */
    public void setMCliente(ArrayList<Cliente> mCliente) {
        this.mCliente = mCliente;
    }

    public ArrayList<Producto> busquedaProductosCliente(String datosClte){
        //ArrayList<Producto> AP=new ArrayList();

        //ArrayList<Cliente> c=this.getMCliente();

        Iterator iterador = this.mCliente.listIterator();
        
        while( iterador.hasNext() ) {
            Cliente c = (Cliente) iterador.next();
                if(c.getDocumentacion().compareToIgnoreCase(datosClte)==0){
                    return c.getMProducto();
                }
            
            }
        
        return null;


    }


    public Cliente buscarCliente(String s) {
        Iterator it = this.mCliente.listIterator();
        while (it.hasNext()) {
            Cliente c = (Cliente)it.next();
            if (c.getNombreCliente().compareToIgnoreCase(s) == 0) {
                return c;
            }
        }
        return null;
    }

    /**
     * @return the ncta
     */
    public String getNcta() {
        return ncta;
    }

    /**
     * @param ncta the ncta to set
     */
    public void setNcta(String ncta) {
        this.ncta = ncta;
    }

    /**
     * @return the numofic
     */
    public String getNumofic() {
        return numofic;
    }

    /**
     * @param numofic the numofic to set
     */
    public void setNumofic(String numofic) {
        this.numofic = numofic;
    }
    public String calcularcta(String d){
        int n=Integer.valueOf(d)+1;
        String m=String.valueOf(n);
        while(m.length()!=10)m="0"+m;
        return m;
    }

    public void altaproducto(String titular, String dni, String tipo){
       Producto ultimoProducto;
        int aux=mProducto.size();
        ultimoProducto=mProducto.get(aux-1);
        String uProducto=ultimoProducto.getNumeroProducto();
        Producto p = null;
        if(tipo.equalsIgnoreCase("CuentaCorriente")){
             p=new CCorriente();
        }
        else if(tipo.equalsIgnoreCase("LibretaAhorro"))
        {
             p=new Libreta();
        }
        else if(tipo.equalsIgnoreCase("PrestamoPersonal")){
             p=new PrstmPersonal();
        }
        else if(tipo.equalsIgnoreCase("PrestamoHipotecario")){
             p=new PrstmHipotecario();
        }

        p.setNumeroProducto(uProducto.toString()+1);

        if(this.buscarCliente(titular)==null){
             ClienteFisico c;
             c=new ClienteFisico();
             c.setNombreCliente(titular);
             c.setDocumentacion(dni);
             c.insertaProductoenCliente(p);
             p.insertaTitularenProducto(c);
             mCliente.add(c);// habria que añadirlo si no esta ya añadido
        }
        else {
            Cliente c;
            c=this.buscarCliente(titular);
            c.insertaProductoenCliente(p);
            p.insertaTitularenProducto(c);
        }




        mProducto.add(p);

    }


public void transferencia(String c1, String c2, Double imp){
       Producto p,p1=new Producto();
       p=this.devuelveProducto(c1);
       p1=this.devuelveProducto(c2);
       Date fec= new Date();
       if((imp>=1) && (p.getSaldo()-imp>=0) && (p!=null)){
                 OpTransferencia op=new OpTransferencia();
                 OpTransferencia op2=new OpTransferencia();
                 op.setId(Movimiento.idsc++);
                 op.setConceptobreve("Transferencia bancaria");
                 op.setFechaOperacion(fec);
                 op.setImporte(-imp);
                 p.addOpTransferencia(op);
             if(p1!=null){

                 op2.setId(Movimiento.idsc++);
                 op2.setConceptobreve("Transferencia bancaria");
                 op2.setFechaOperacion(fec);
                 op2.setImporte(imp);
                 p1.addOpTransferencia(op2);

                         }
             else{
                 Double comision=(imp*0.1)/100;
                 op2.setId(Movimiento.idsc++);
                 op2.setConceptobreve("Comisión por transferencia.");
                 op2.setImporte(-comision);
                 op2.setFechaOperacion(fec);
                 p.addOpTransferencia(op2);
                 }
             }
}
}






