/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javabbuva;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import javax.sound.midi.Sequence;

/**
 *
 * @author Adrian
 */
@Entity
public class Producto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

     // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.43C90FC7-8613-A683-AE31-DC93F0F5B8D3]
    // </editor-fold>
    //@OneToMany(cascade=CascadeType.ALL)
    @Transient
    private List <Movimientos> mMovimientos;

    @OneToMany(cascade=CascadeType.ALL)
    private List <Cliente> mClientes;

    private String tipo;

    private float dinero;

    private String numeroCuenta;

    private int numeroTitulares;

    //@OneToMany(cascade=CascadeType.ALL)
    @Transient
    private List<Domiciliacion> mDomiciliaciones;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,id=DCE.2F03FC7B-622B-CFA8-D150-E0BB858D12F0]
    // </editor-fold>
    public Producto () {
        mMovimientos = new ArrayList();
        mClientes = new ArrayList();
        mDomiciliaciones = new ArrayList();
        tipo = "";
        dinero = 0;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.44E69968-8073-67E1-7C39-E888E8BD42BB]
    // </editor-fold>
    public List <Movimientos> getMovimientos () {
        return mMovimientos;
    }

    public void ingresar(float ingreso) {
        this.dinero += ingreso;
    }

    public void restar(float reintegro){
        this.dinero -= reintegro;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.78E8012B-A660-6F84-7251-5370968BF5A6]
    // </editor-fold>
    public void setMovimientos (List <Movimientos> val) {
        this.mMovimientos = val;
    }

    /**
     * @return the mClientes
     */
    public List<Cliente> getMClientes() {
        return mClientes;
    }

    /**
     * @param mClientes the mClientes to set
     */
    public void setMClientes(List<Cliente> mClientes) {
        this.mClientes = mClientes;
    }

    public void añadirCliente(Cliente cli){
        mClientes.add(cli);
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

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

    /**
     * @return the dinero
     */
    public float getDinero() {
        return dinero;
    }

    /**
     * @param dinero the dinero to set
     */
    public void setDinero(float dinero) {
        this.dinero = dinero;
    }

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

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

    /**
     * @return the numeroTitulares
     */
    public int getNumeroTitulares() {
        return numeroTitulares;
    }

    /**
     * @param numeroTitulares the numeroTitulares to set
     */
    public void setNumeroTitulares(int numeroTitulares) {
        this.numeroTitulares = numeroTitulares;
    }

    //METODO QUE INCREMENTA EN UNO EL NUMERO DE TITULARES
    public void incrementarTitulares(){
        this.numeroTitulares++;
    }

    //METODO QUE INCLUYE UN MOVIMIENTO A EL PRODUCTO
    public void incluirMovimiento(Movimientos m){
        if(mMovimientos.size() == 0){
            m.setIdentificador("1");
            this.mMovimientos.add(m);
        }
        else{
            //PARA DARLE UN IDENTIFICADOR A EL MOVIMIENTO
            int i = Integer.parseInt(mMovimientos.get(mMovimientos.size()-1).getIdentificador());
            m.setIdentificador(String.valueOf(i+1));
            this.mMovimientos.add(m);
        }
    }

    public void setCuentaAsociada(String cuenta) {
    }

    /**
     * @return the mDomiciliaciones
     */
    public List<Domiciliacion> getMDomiciliaciones() {
        return mDomiciliaciones;
    }

    /**
     * @param mDomiciliaciones the mDomiciliaciones to set
     */
    public void setMDomiciliaciones(List<Domiciliacion> mDomiciliaciones) {
        this.mDomiciliaciones = mDomiciliaciones;
    }

    public void añadirDomiciliacion(String nombre){
        Domiciliacion d = new Domiciliacion();
        d.setNombreD(nombre);
        mDomiciliaciones.add(d);
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Producto)) {
            return false;
        }
        Producto other = (Producto) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "vistas.Producto[id=" + id + "]";
    }

}
