package com.rjconsultores.ventaboletos.entidad;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.Hibernate;

import br.com.rjconsultores.auditador.annotations.AuditarClasse;
import br.com.rjconsultores.auditador.annotations.NaoAuditar;
import br.com.rjconsultores.auditador.interfaces.Auditavel;

@AuditarClasse(nome = "CategoriaBloqueioImpPosterior", tela = "auditarClasse.CategoriaBloqueioImpPosterior")
@Entity
@SequenceGenerator(name = "CAT_BLOQ_IMPPOSTERIOR_SEQ", sequenceName = "CAT_BLOQ_IMPPOSTERIOR_SEQ", allocationSize = 1)
@Table(name = "CATEGORIA_BLOQ_IMPPOSTERIOR")
public class CategoriaBloqueioImpPosterior implements  Auditavel<CategoriaBloqueioImpPosterior> {
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "CAT_BLOQ_IMPPOSTERIOR_SEQ")
	@Column(name = "CATBLOQUEIOIMPPOSTERIOR_ID")
	private Integer categoriaBloqueioImpPosteriorId;
	@ManyToOne()
	@JoinColumn(name = "PUNTOVENTA_ID")
	private PuntoVenta puntoventa;
	@ManyToOne()
	@JoinColumn(name = "CATEGORIA_ID")
	private Categoria categoria;
	
	@Transient
	@NaoAuditar
	private CategoriaBloqueioImpPosterior categoriaBloqueioImpPosteriorClone;
	
	public Integer getCategoriaBloqueioImpPosteriorId() {
		return categoriaBloqueioImpPosteriorId;
	}
	public void setCategoriaBloqueioImpPosteriorId(Integer categoriaBloqueioImpPosteriorId) {
		this.categoriaBloqueioImpPosteriorId = categoriaBloqueioImpPosteriorId;
	}
	public PuntoVenta getPuntoventa() {
		return puntoventa;
	}
	public void setPuntoventa(PuntoVenta puntoventa) {
		this.puntoventa = puntoventa;
	}
	public Categoria getCategoria() {
		return categoria;
	}
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}	
	
	@Override
	public int hashCode() {
		int hash = 0;
		hash += (categoriaBloqueioImpPosteriorId != null ? categoriaBloqueioImpPosteriorId.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 CategoriaBloqueioImpPosterior)) {
			return false;
		}
		CategoriaBloqueioImpPosterior other = (CategoriaBloqueioImpPosterior) object;
		if ((this.categoriaBloqueioImpPosteriorId == null && other.categoriaBloqueioImpPosteriorId != null) || (this.categoriaBloqueioImpPosteriorId != null && !this.categoriaBloqueioImpPosteriorId.equals(other.categoriaBloqueioImpPosteriorId))) {
			return false;
		}
		return true;
	}
	
	@Override
	public void clonar() throws CloneNotSupportedException {
		categoriaBloqueioImpPosteriorClone = new CategoriaBloqueioImpPosterior();
		categoriaBloqueioImpPosteriorClone = (CategoriaBloqueioImpPosterior) this.clone();
		Hibernate.initialize(categoriaBloqueioImpPosteriorClone.getPuntoventa());
		
	}

	@Override
	public CategoriaBloqueioImpPosterior getCloneObject() throws CloneNotSupportedException {
		return categoriaBloqueioImpPosteriorClone;
	}

	@Override
	public String getTextoInclusaoExclusao() {
		return String.format("ID [%s]", getCategoriaBloqueioImpPosteriorId());
	}
}
