package com.rjconsultores.ventaboletos.entidad;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;

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.Lob;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
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;

@Entity
@AuditarClasse(nome = "SolicitudExpreso", tela = "auditarClasse.TrayectoExpreso")
@SequenceGenerator(name = "TRAYECTOS_EXPRESO_SEQ", sequenceName = "TRAYECTOS_EXPRESO_SEQ", allocationSize = 1)
@Table(name = "TRAYECTOS_EXPRESOS")
public class TrayectosExpresos implements Serializable, Auditavel<TrayectosExpresos>{
	
	private static final long serialVersionUID = 1L;	
	
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "TRAYECTOS_EXPRESO_SEQ")
	@Column(name = "TRAYECTOSEXPRESOS_ID")
	private Integer trayectoExpresoId;
	
	@JoinColumn(name = "SOLICITUDEXPRESO_ID")
	@OneToOne
	private SolicitudExpreso solicitudExpresoId;
	
	@Column(name = "DESCTRAYECTO")
	private String descTrayecto;
	
	@Column(name = "VALORTRAYECTO")
	private Integer valorTrayecto;
	
	@Column(name = "CANTVEHICULOS")
	private Integer cantVehiculos;
	
	@Column(name = "NUMPLACA")
	private String numPlaca;
	
	@Lob
	@Column(name = "DOCFLUEC", columnDefinition="BLOB")
	private byte[] docFluec;
	
	@Column(name = "ACTIVO")
	private Boolean activo;
	
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechaHoraModif;
	
	@Column(name = "USUARIO_ID")
	private Integer usuarioId;
	
	@Transient
	@NaoAuditar
	private TrayectosExpresos trayectosExpresosClone;
	
	public TrayectosExpresos() {}

	public Integer getTrayectoExpresoId() {
		return trayectoExpresoId;
	}

	public void setTrayectoExpresoId(Integer trayectoExpresoId) {
		this.trayectoExpresoId = trayectoExpresoId;
	}

	public SolicitudExpreso getSolicitudExpresoId() {
		return solicitudExpresoId;
	}

	public void setSolicitudExpresoId(SolicitudExpreso solicitudExpresoId) {
		this.solicitudExpresoId = solicitudExpresoId;
	}

	public String getDescTrayecto() {
		return descTrayecto;
	}

	public void setDescTrayecto(String descTrayecto) {
		this.descTrayecto = descTrayecto;
	}

	public Integer getValorTrayecto() {
		return valorTrayecto;
	}

	public void setValorTrayecto(Integer valorTrayecto) {
		this.valorTrayecto = valorTrayecto;
	}

	public Integer getCantVehiculos() {
		return cantVehiculos;
	}

	public void setCantVehiculos(Integer cantVehiculos) {
		this.cantVehiculos = cantVehiculos;
	}

	public String getNumPlaca() {
		return numPlaca;
	}

	public void setNumPlaca(String numPlaca) {
		this.numPlaca = numPlaca;
	}

	public byte[] getDocFluec() {
		return docFluec;
	}

	public void setDocFluec(byte[] docFluec) {
		this.docFluec = docFluec;
	}

	public Boolean getActivo() {
		return activo;
	}

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

	public Date getFechaHoraModif() {
		return fechaHoraModif;
	}

	public void setFechaHoraModif(Date fechaHoraModif) {
		this.fechaHoraModif = fechaHoraModif;
	}

	public Integer getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Integer usuarioId) {
		this.usuarioId = usuarioId;
	}

	@Override
	public String toString() {
		return "TrayectosExpresos [trayectoExpresoId=" + trayectoExpresoId + ", solicitudExpresoId="
				+ solicitudExpresoId + ", descTrayecto=" + descTrayecto + ", valorTrayecto=" + valorTrayecto
				+ ", cantVehiculos=" + cantVehiculos + ", numPlaca=" + numPlaca + ", docFluec="
				+ Arrays.toString(docFluec) + ", activo=" + activo + ", fechaHoraModif=" + fechaHoraModif
				+ ", usuarioId=" + usuarioId + "]";
	}

	@Override
	public void clonar() throws CloneNotSupportedException {
		trayectosExpresosClone = new TrayectosExpresos();
		trayectosExpresosClone = (TrayectosExpresos)this.clone();
		Hibernate.initialize(trayectosExpresosClone.getSolicitudExpresoId());
	}

	@Override
	public TrayectosExpresos getCloneObject() throws CloneNotSupportedException {
		return trayectosExpresosClone;
	}

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