package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
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.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Where;

import com.rjconsultores.ventaboletos.anotacao.Renderizado;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@SequenceGenerator(name = "GRUPO_CONTRATO_SEQ", sequenceName = "GRUPO_CONTRATO_SEQ", allocationSize = 1)
@Table(name = "GRUPO_CONTRATO")
public class GrupoContrato implements Serializable {

	private static final long serialVersionUID = -3684489881654368314L;

	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "GRUPO_CONTRATO_SEQ")
	@Renderizado
	@Column(name = "GRUPOCONTRATO_ID")
	private Long grupoContratoId;
	
	@Renderizado
	@Column(name = "NOMEGRUPOCONTRATO")
	private String nomeGrupoContrato;
	
	@OneToMany(mappedBy = "grupoContrato", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@Where(clause = "ACTIVO=1")
    private List<TarifaGrupoContrato> tarifasGrupoContrato;
	
	@OneToMany(mappedBy = "grupoContrato", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@Where(clause = "ACTIVO=1")
    private List<ExcecaoGrupoContrato> excecoesGrupoContrato;
	
	@Column(name = "ACTIVO")
	private Boolean activo;
	
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecmodif;
	
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;

	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}
		
		if (getClass() != obj.getClass()) {
			return false;
		}
		
		final GrupoContrato other = (GrupoContrato) obj;
		return this.getGrupoContratoId().equals(other.getGrupoContratoId());
	}

	@Override
	public int hashCode() {
		int hash = 7;
		hash = 59 * hash + (this.getGrupoContratoId() != null ? this.getGrupoContratoId().hashCode() : 0);
		return hash;
	}

	@Override
	public String toString() {
		return this.getNomeGrupoContrato();
	}
	
}
