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


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.F6ADC267-7896-6E10-0302-A5E8B022AE3F]
// </editor-fold> 
public class Sucursal {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.24301496-C66B-ED4E-58AD-BC08B97D0F20]
    // </editor-fold> 
    private ArrayList<Producto> mProducto;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.35C55C5A-F75F-43DE-EB4C-274D79095BBF]
    // </editor-fold> 
    private ArrayList<Remesa> mRemesa;

    private ArrayList<Cliente> mCliente;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C1FFA6F3-2A70-CCD5-4BCA-820B9BA4E4BF]
    // </editor-fold> 
    public Sucursal () {
        mProducto=new ArrayList();
        mRemesa=new ArrayList();
        mCliente=new ArrayList();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.F9B3703C-EB97-7CC3-8FE1-06153FB4DFEF]
    // </editor-fold> 
    public ArrayList<Producto> getProducto () {
        return mProducto;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.D1F674F8-817C-0A8D-C6F2-99AD1F9CCA7D]
    // </editor-fold> 
    public void setProducto (ArrayList<Producto> val) {
        this.mProducto = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.01ADB45C-0D5D-C657-87A4-C6A632CE3CD9]
    // </editor-fold> 
    public ArrayList<Remesa> getRemesa () {
        return mRemesa;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7CDDD229-A67D-3979-090F-7478CEB92848]
    // </editor-fold> 
    public void setRemesa (ArrayList<Remesa> val) {
        this.mRemesa = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.80C35FDE-A9A2-C741-2D07-A24D3516D4FB]
    // </editor-fold> 
    public void nuevaRemesaCargos () {
    }

    public String verRemesaCargos( String path)
    {
        String stResumenRemesa="";
        FileReader fr = null;
        try {
        fr = new FileReader(path);
        BufferedReader bf = new BufferedReader(fr);
        String linea;
        String buf;
        while((linea=bf.readLine())!=null){

            buf = linea.substring(0, 4);

            if (buf.compareTo("5180") == 0)
            {
                //Registro cabecera presentador
                stResumenRemesa = "\n" + linea.substring(28, 68);
                stResumenRemesa += "\n";
                
            } else if (buf.compareTo("5680") == 0)
                {
                    //Registro individual obligatorio
                    stResumenRemesa += "\n" + linea.substring(28, 68);
                    stResumenRemesa += "\t" + linea.substring(88, 98);
                } else if (buf.compareTo("5980") == 0)
                    {
                        //Registro total final
                        stResumenRemesa += "\n\n\tTotal Remesa: " + linea.substring(88, 98);
                    }
            //tratamiento de la linea, con método String substring( int beginindex,int endindex );
        }
        } catch (IOException ex)
            {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
            }
        return stResumenRemesa;
    }

    public void incorporarRemesa( String path ) throws ParseException
    {
        FileReader fr = null;
        try {
        fr = new FileReader(path);
        BufferedReader bf = new BufferedReader(fr);
        String linea;
        String buf;
        String stFechaRem = "";
        String numCta = "";

        while((linea=bf.readLine())!=null){

            buf = linea.substring(0, 4);
            Remesa r = new Remesa();

            if (buf.compareTo("5180") == 0)
            {
                //Registro cabecera presentador
                r.setNombreOrdenante(linea.substring(28, 68));
                
            } else if (buf.compareTo("5380") == 0)
                {
                    //Registro cabecera ordenante
                    stFechaRem = linea.substring(22, 28);
                } else if (buf.compareTo("5680") == 0)
                    {
                        //Registro individual obligatorio
                        Op_Remesa op = new Op_Remesa();

                        DecimalFormat df1 = new DecimalFormat("#######,##");
                        Number n = null;
                    try {
                        n = df1.parse(linea.substring(88, 98));
                    } catch (ParseException ex) {
                        Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
                    }
                        op.setDImporte(n.intValue());
                        op.setStConcBreve(r.getNombreOrdenante());

                        SimpleDateFormat df2 = new SimpleDateFormat("ddMMyy");
                        op.setDatOpe(df2.parse(stFechaRem));

                        r.InsertOp_Remesa(op);

                        //Leo el numero de cuenta.
                        numCta=linea.substring(68,88);
                        //Ejecuto devuelve producto y le paso el numero de cuenta.
                        Producto auxCta = this.devuelveProducto(numCta);
                        //Insertar movimiento en su producto.
                        auxCta.insertaMovimientoenCuenta(op);
                    } 
        }
        } catch (IOException ex)
            {
            Logger.getLogger(Sucursal.class.getName()).log(Level.SEVERE, null, ex);
            }
    }

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

    public Producto devuelveProducto(String numCuenta)
    {
        Iterator iterador = this.mProducto.listIterator();

        while( iterador.hasNext() ) {
            Producto p = (Producto) iterador.next();
            if (p.getStNumPro().compareTo(numCuenta)==0){
                return p;
            }
        }
        return null;
    }

    public void RegistraMovimiento (Op_Basica op)
    {
        Producto auxCta = this.devuelveProducto(op.getStCuentaCorriente());
        
        if (op.getDImporte() > 0)
        {
            auxCta.setDSaldo(auxCta.getDSaldo() + op.getDImporte());
            auxCta.insertaMovimientoenCuenta(op);
        } else
            {
                if(Math.abs(op.getDImporte()) < auxCta.getDSaldo())
                {
                    auxCta.setDSaldo(auxCta.getDSaldo() + op.getDImporte());
                    auxCta.insertaMovimientoenCuenta(op);
                } else
                    {
                        System.out.println("SALDO INSUFICIENTE.");
                    }
            }
        
    }

    public void setMCliente(ArrayList<Cliente> mCliente) {
        this.mCliente = mCliente;
    }

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

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

        Iterator iterador = this.mCliente.listIterator();

        while( iterador.hasNext() ) {
            Cliente c = (Cliente) iterador.next();
            if(tipoBusq==1){
                if(c.getDocumentacion().compareToIgnoreCase(datosClte)==0){
                    return c.getMProducto();
                }
            }else{
                if(tipoBusq==2){
                    if (c.getNombreCliente().compareToIgnoreCase(datosClte)==0){
                    return c.getMProducto();

                    }
                }
            }

        }
        return null;
    }

    public void crearCC(String stName, String stCC,String stDoc) {
        Cliente C = new Cliente();
        C.setNombreCliente(stName);
        C.setDocumentacion(stDoc);

        Producto P = new CtaCorriente();
        P.setDSaldo(0);
        P.setNumeroProducto(stCC);


        C.insertaProductoenCliente(P);
        P.insertaTitularenProducto(C);

        this.mCliente.add(C);
        this.mProducto.add(P);
    }

    public ArrayList<Producto> busquedaProductosCliente(String datosClte)
    {
        Iterator iterador = this.mCliente.listIterator();

        while( iterador.hasNext() ) {
            Cliente c = (Cliente) iterador.next();
            if (c.getNombreCliente().compareToIgnoreCase(datosClte)==0)
                {
                    return c.getMProducto();}
            }
        return null;
    }

    public void RegistraTrans_Int(T_Interna auxMov) {
        
    }
}