package Modelo;

//import java.util.ArrayList;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Persistence;
import javax.persistence.Transient;

/**
 *
 * @author User
 */

@Entity
public class Cliente implements Serializable {

        private String documentacion;
        private String nombreCliente;
        @OneToMany(mappedBy = "cliente")
        private List<Producto> mProducto;
        @Transient
        private List<Domiciliacion> mDomiciliacion;
    
    
    
    
    @Transient
    private Producto miProducto;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;




        public Cliente(){
            mProducto=new ArrayList();
            mDomiciliacion = new ArrayList();
        }


    public String getNombreCliente () {
        return nombreCliente;
    }


    public void setNombreCliente (String val) {
        this.nombreCliente = val;
    }

    /**
     * @return the documentacion
     */
    public String getDocumentacion() {
        return documentacion;
    }

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

    /**
     * @return the mProducto
     */
    public List<Producto> getMProducto() {
        return mProducto;
    }

    /**
     * @param mProducto the mProducto to set
     */
    public void setMProducto(List<Producto> mProducto) {
        this.mProducto = mProducto;
    }

    public void insertaProductoenCliente(Producto p){
        this.mProducto.add(p);
    }

    /**
     * @return the mDomiciliacion
     */
    public List<Domiciliacion> getMDomiciliacion() {
        return mDomiciliacion;
    }

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

    public void addDomiciliacion(Domiciliacion d)
    {
        this.mDomiciliacion.add(d);
    }

    
    public boolean bExisteDomiciliacion(String nombreOrdenante) {
        Iterator iterador = this.mDomiciliacion.listIterator();
        boolean bRes = false;

        while( iterador.hasNext() && !bRes )
        {
            Domiciliacion d = (Domiciliacion) iterador.next();

            if(nombreOrdenante.compareTo(d.getStOrdenante()) == 0)
            {
                bRes = true;
            }
        }

        return bRes;        
    }

    public boolean bPerteneceProducto(String numCta) {
        Iterator iterador = this.mProducto.listIterator();
        boolean bRes = false;

        while( iterador.hasNext() && !bRes )
        {
            Producto p = (Producto) iterador.next();
            
            if(numCta.compareTo(p.getStNumPro()) == 0)
            {
                bRes = true;
            }
        }
        
        return bRes;
    }

    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 Cliente)) {
            return false;
        }
        Cliente other = (Cliente) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    

    @Override
    public String toString() {
        String stRes = "";

        Iterator iterador = this.mProducto.listIterator();

        while (iterador.hasNext())
        {
            Producto p = (Producto) iterador.next();

            stRes+= "DNI: "
                    + this.documentacion
                    + "      Nombre: "
                    + this.nombreCliente
                    + "     NºCC"
                    + p.getStNumPro();
        }

        return stRes;
    }

    /**
     * @return the miProducto
     */
    public Producto getMiProducto() {
        return miProducto;
    }

    /**
     * @param miProducto the miProducto to set
     */
    public void setMiProducto(Producto miProducto) {
        this.miProducto = miProducto;
     }

    public void addMProducto(Producto p)
    {
        this.mProducto.add(p);
    }

    /*public void AnadirBD()
    {
       Controlador cAux= new Controlador();
       cAux.crearClienteBD(this.documentacion, this.nombreCliente);
    }*/
    


}
