package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@SequenceGenerator(name = "MENSAJE_SEQ", sequenceName = "MENSAJE_SEQ", allocationSize = 1)
@Table(name = "MENSAJE")
public class Mensaje implements Serializable {

	private static final long serialVersionUID = 1L;

	private Integer mensajeId;
	private Date fecIni;
	private Date fecFin;
	private String descripcion;
	private Boolean indTipo;
	private Boolean activo;
	private Date fecModif;
	private Integer usuarioId;
	private List<MensajePuntoVenta> mensajesPuntoVenda;
	private List<MensajeEmpresa> mensajesEmpresa;
	private List<MensajeUsuario> mensajesUsuario;

	public Mensaje() {
		mensajesPuntoVenda = new ArrayList<MensajePuntoVenta>();
		mensajesEmpresa = new ArrayList<MensajeEmpresa>();
		mensajesUsuario = new ArrayList<MensajeUsuario>();
	}

	@Id
	@Column(name = "MENSAJE_ID")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "MENSAJE_SEQ")
	@Basic(optional = false)
	public Integer getMensajeId() {
		return mensajeId;
	}

	public void setMensajeId(Integer mensajeId) {
		this.mensajeId = mensajeId;
	}

	@Column(name = "FECINI")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getFecIni() {
		return fecIni;
	}

	public void setFecIni(Date fecIni) {
		this.fecIni = fecIni;
	}

	@Column(name = "FECFIN")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getFecFin() {
		return fecFin;
	}

	public void setFecFin(Date fecFin) {
		this.fecFin = fecFin;
	}

	@Column(name = "DESCRIPCION")
	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@Column(name = "INDTIPO")
	public Boolean getIndTipo() {
		return indTipo;
	}

	public void setIndTipo(Boolean indTipo) {
		this.indTipo = indTipo;
	}

	@Column(name = "ACTIVO")
	public Boolean getActivo() {
		return activo;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getFecModif() {
		return fecModif;
	}

	public void setFecModif(Date fecModif) {
		this.fecModif = fecModif;
	}

	@Column(name = "USUARIO_ID")
	public Integer getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Integer usuarioId) {
		this.usuarioId = usuarioId;
	}
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = "MENSAJE_ID", referencedColumnName = "MENSAJE_ID")
	public List<MensajePuntoVenta> getMensajesPuntoVenda() {
		return mensajesPuntoVenda;
	}

	public void setMensajesPuntoVenda(List<MensajePuntoVenta> mensajesPuntoVenda) {
		this.mensajesPuntoVenda = mensajesPuntoVenda;
	}
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = "MENSAJE_ID", referencedColumnName = "MENSAJE_ID")
	public List<MensajeEmpresa> getMensajesEmpresa() {
		return mensajesEmpresa;
	}

	public void setMensajesEmpresa(List<MensajeEmpresa> mensajesEmpresa) {
		this.mensajesEmpresa = mensajesEmpresa;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = "MENSAJE_ID", referencedColumnName = "MENSAJE_ID")
	public List<MensajeUsuario> getMensajesUsuario() {
		return mensajesUsuario;
	}

	public void setMensajesUsuario(List<MensajeUsuario> mensajesUsuario) {
		this.mensajesUsuario = mensajesUsuario;
	}

	@Override
	public String toString() {
		return mensajeId == null ? "null" : this.mensajeId.toString();
	}
	
	@Override
	public int hashCode() {
		int hash = 0;
		hash += (mensajeId != null ? mensajeId.hashCode() : 0);
		return hash;
	}

	@Override
	public boolean equals(Object object) {
		if (!(object instanceof Mensaje)) {
			return false;
		}
		Mensaje other = (Mensaje) object;
		if ((this.mensajeId == null && other.mensajeId != null) || (this.mensajeId != null && !this.mensajeId.equals(other.mensajeId))) {
			return false;
		}
		return true;
	}

}
