package bbuvajava;

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


public class Producto {
    private String numeroProducto; 
    private float saldo;          
    private ArrayList<Movimiento> mMovimiento;
    private ArrayList<Cliente> mTitulares;
    private ArrayList<Domicializacion> mDomicializaciones;

    public Producto () {
        mMovimiento=new ArrayList();
        mTitulares=new ArrayList();
        mDomicializaciones=new ArrayList();
    }

    public ArrayList<Movimiento> getMovimiento () {
        return mMovimiento;
    }
    
    public String getNumeroProducto() {
        return numeroProducto;
    }
    
    public ArrayList<Domicializacion> getMDomicializaciones() {
        return mDomicializaciones;
    }

    public ArrayList<Cliente> getMTitulares() {
        return mTitulares;
    }

    public float getSaldo() {
        return saldo;
    }

    public void setSaldo(float saldo) {
        this.saldo = saldo;
    }

    public void setMovimiento (ArrayList<Movimiento> val) {
        this.mMovimiento = val;
    }

    public void setNumeroProducto(String numeroProducto) {
        this.numeroProducto = numeroProducto;
    }

    public void setMDomicializaciones(ArrayList<Domicializacion> mDomicializaciones) {
        this.mDomicializaciones = mDomicializaciones;
    }

    public void setMTitulares(ArrayList<Cliente> mTitulares) {
        this.mTitulares = mTitulares;
    }

    public void anadirDomicializacion(Domicializacion D) {
        getMDomicializaciones().add(D);
    }

    public void anadirMovimiento(Movimiento M){ 
        this.mMovimiento.add(M);
    }

    public Movimiento get_Movimiento(int n) {
        if(n>0){
           int x=n-1;
           if(x<mMovimiento.size()){
             Movimiento m=new Movimiento();
             m=mMovimiento.get(x);
             return m;
           }

           else{
             return null;
           }
        }
        else return null;

    }
    
    public void ingreso(float c){
         if(c>0){
         Movimiento ingreso= new OPBasica();
         ingreso.setImporte(c);
         ingreso.setConcepto("Ingreso");
         incrementoSaldo(c);
         anadirMovimiento(ingreso);
         }
    }

    public void reintegro(float c){
         if(c>0){
         Movimiento reintegro= new OPBasica();
         reintegro.setImporte(c);
         reintegro.setConcepto("Reintegro");
         decrementoSaldo(c);
         anadirMovimiento(reintegro);
         }
    }

    public void cargo(OPRemesa c){
         c.setConcepto("Cargo");
         decrementoSaldo(c.getImporte());
         anadirMovimiento(c);
    }

    public void abono(OPRemesa a){
         a.setConcepto("Abono");
         incrementoSaldo(a.getImporte());
         anadirMovimiento(a);
    }

    public void decrementoSaldo(float saldo){  
        if(this.saldo>=saldo && saldo>0){
           this.saldo -= saldo;
        }
    }

    public void incrementoSaldo(float saldo){  
        if(saldo>0){
        this.saldo +=saldo;
        }
    }

    public void insertaTitularenProducto(Cliente c1) {
        getMTitulares().add(c1);
    }

    public String mostrar_nmovimientos(int num){
        String aux="";
        int n=0;
        int i;
        int ultimo=this.mMovimiento.size()-1;
        if(num>0){
             if(mMovimiento.size()>0){
                  while(n<num) {
                      Movimiento m = mMovimiento.get(ultimo);
                      i=ultimo+1;
                      aux+="\n    Nº Movimiento "+i+": "+m.getConcepto();
                      aux+="  "+m.getImporte();
                      n++;
                      ultimo--;
                  }
                  aux+="\n\n\tNº Total de movimientos: "+num;
             }

             else{
                 aux="No hay ningun movimiento en la cuenta.";
             }
         }

         return aux;
    }

    public String mostrar_domicializaciones() {
        String aux="";
        int i=0;
        Iterator iterador = this.getMDomicializaciones().listIterator();
        if(getMDomicializaciones().size()!=0){
            while( iterador.hasNext() ) {
                Domicializacion d = (Domicializacion) iterador.next();
                i++;
                aux+="\n\t Dom"+i+":  Ordenante: "+d.getC().getNombreCliente();
            }
        }
        else{
            aux="\n\tEsta cuenta no tiene domicializaciones.";
        }
        return aux;
     }


}

