package bbuvajava;



import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;


// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.195A1283-3F75-C9B4-5DB9-E2B5B7CD9E5F]
// </editor-fold> 
public class Producto {
    private Date FechaCreacion;
    private String NumeroCuenta;
    private ArrayList<Titular> mTitular;   //lista de los titulares
    private double saldo;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A010480C-9B7E-819D-94D2-2A15BF2490C6]
    // </editor-fold> 
    private ArrayList<Movimiento> mMovimientos;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.92B7E496-151F-78F7-66EC-53C7B2015FE2]
    // </editor-fold> 
    public Producto () {
        mMovimientos=new ArrayList();
        mTitular=new ArrayList();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.8C5F1FF8-5A69-2EEE-094C-A46BC28AF4A8]
    // </editor-fold> 
    public ArrayList<Movimiento> getMovimientos () {
        return mMovimientos;
    }


    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.01AC4A67-BC9B-DC3B-5BE3-1A13CEA511D0]
    // </editor-fold> 
    public void setMovimientos (ArrayList<Movimiento> val) {
        mMovimientos=val;
    }

    /**
     * @return the NumeroCuenta
     */
    public String getNumeroCuenta() {
        return NumeroCuenta;
    }

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

    /**
     * @return the Titular
     */
    public ArrayList getTitular() {
        return mTitular;
    }


    /**
     * @param Titular the Titular to set
     */
    public void setTitular(ArrayList Ti) {
        this.mTitular = Ti;
    }


    public void insertaTitular (Titular t){
        this.mTitular.add(t);
    }

    public void setTitular(String nombre){
        Titular t=new Titular();
        t.setNombre(nombre);
        insertaTitular(t);

    }
    public void insertaMovimientoenCuenta(Movimiento mov){
        this.mMovimientos.add(mov);
    }

    /**
     * @return the saldo
     */
    public double getSaldo() {
        return saldo;
    }

    /**
     * @param saldo the saldo to set
     */
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public void ingresar(double cantidad){
        Date fecha=new Date();
        OpBasica mov=new OpBasica();

        this.saldo=this.saldo+cantidad;
        mov.setConcepto("Ingreso");
        mov.setFechaOperacion(fecha);
        mov.setImporte(cantidad);
        this.insertaMovimientoenCuenta(mov);


    }

    public void reintegrar (double cantidad){
        Date fecha=new Date();
        OpBasica mov=new OpBasica();

        this.saldo=this.saldo-cantidad;
        mov.setConcepto("Reintegro");
        mov.setFechaOperacion(fecha);
        mov.setImporte(cantidad);
        this.insertaMovimientoenCuenta(mov);
    }

    /**
     * @return the FechaCreacion
     */
    public Date getFechaCreacion() {
        return FechaCreacion;
    }

    /**
     * @param FechaCreacion the FechaCreacion to set
     */
    public void setFechaCreacion(Date FechaCreacion) {
        this.FechaCreacion = FechaCreacion;
    }
    public boolean IdentificadorValido(String iden){
        boolean valido=false;
        int longitud=0,i=0;
        char c;

        longitud=iden.length();
        if (longitud==9){
            valido=true;
            while ((i<9) && (valido==true)){
                c=iden.charAt(i);
                if (i<8){
                    if ((c!='1') & (c!='2') & (c!='3') & (c!='4') & (c!='5') &
                    (c!='6') & (c!='7') & (c!='8') & (c!='9') & (c!='0'))
                    valido=false;
                    i++;
                }else{
                    if(((c>'A') && (c<'Z')) || ((c>'a') && (c<'z')))
                        valido=true;
                    else valido=false;
                    i++;
                }
            }
        }
        return valido;
    }
    public boolean NumCuentaValido(String numero){
        boolean valido=false;
        int longitud=0,i=0;
        char c;
        //Comprobamos que la longitud sea 20
        //y que sean números
        longitud=numero.length();
        //System.out.println("Longitud="+longitud);
        if (longitud==20){
            valido=true;
            while ((i<20) & (valido==true)){
                c=numero.charAt(i);
                if ((c!='1') & (c!='2') & (c!='3') & (c!='4') & (c!='5') &
                    (c!='6') & (c!='7') & (c!='8') & (c!='9') & (c!='0'))
                    valido=false;
                i++;
            }
        }


        return valido;
    }

    //Devuelve en forma de texto los últimos cinco movimientos de una cuenta
    public String dameUltimosMovimientos(){
        String texto="";
        
        int numMovimientos;
        Iterator it=mMovimientos.listIterator();
        int numero=0;
        
        
        

        numMovimientos=mMovimientos.size();
        
        if (numMovimientos>0){
            while ((it.hasNext()) && (numero<5)){
                Movimiento mov=(Movimiento) it.next();
                texto=texto+mov.getFechaOperacion()+"\t"+mov.getConcepto()+"\t"+mov.getImporte()+"\n";
                numero++;
            }
        }
        else texto="No hay ningún movimiento.";
        
        return texto;
    }



}

