package com.rjconsultores.ventaboletos.entidad;

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

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

@Entity
@SequenceGenerator(name = "TARIFA_OFICIAL_SEQ", sequenceName = "TARIFA_OFICIAL_SEQ", allocationSize = 1)
@Table(name = "TARIFA_OFICIAL")
@AuditarClasse(nome = "TARIFA", tela = "auditarClasse.TarifaOficial")
public class TarifaOficial implements Serializable, Auditavel<TarifaOficial> {

	private static final long serialVersionUID = 1L;
	@Id
	@Basic(optional = false)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "TARIFA_OFICIAL_SEQ")
	@Column(name = "TARIFAOFICIAL_ID")
	@AuditarID
	private Integer tarifaOficialId;
	
	@Column(name = "PRECIO")
	@AuditarAtributo(nome = "Tarifa")
	private BigDecimal precio;
	
	@Column(name = "PRECIOORIGINAL")
	@AuditarAtributo(nome = "Tarifa Original")
	private BigDecimal preciooriginal;
	
	@Column(name = "IMPORTETAXAEMBARQUE")
	@AuditarAtributo(nome = "Taxa de Embarque")
	private BigDecimal importetaxaembarque;
	
	@Column(name = "IMPORTEPEDAGIO")
	@AuditarAtributo(nome = "Pedagio")
	private BigDecimal importepedagio;
	
	@Column(name = "IMPORTEOUTROS")
	@AuditarAtributo(nome = "Outros")
	private BigDecimal importeoutros;
	
	@Column(name = "IMPORTESEGURO")
	@AuditarAtributo(nome =  "Seguro")
	private BigDecimal importeseguro;
	
	@Column(name = "IMPORTETPP")
	@AuditarAtributo(nome = "Tarifa TPP")
	private BigDecimal importetpp;
	
	@Column(name = "STATUSTARIFA")
	@AuditarAtributo(nome = "Status Tarifa")
	private String statustarifa;
	
	@Column(name = "ACTIVO")
	@NaoAuditar
	private Boolean activo;
	
	@Column(name = "FECMODIF")
	@Temporal(TemporalType.TIMESTAMP)
	@NaoAuditar
	private Date fecmodif;
	
	@Column(name = "USUARIO_ID")
	@NaoAuditar
	private Integer usuarioId;
	
	@OneToOne
	@JoinColumn(name = "TRAMO_ID")
	@NaoAuditar
	private Tramo tramo;
	
	@OneToOne
	@JoinColumn(name = "MARCA_ID")
	@NaoAuditar
	private Marca marca;
	
	@OneToOne
	@JoinColumn(name = "CLASESERVICIO_ID")
	@NaoAuditar
	private ClaseServicio claseServicio;
	
	@OneToOne
	@JoinColumn(name = "MONEDA_ID")
	@NaoAuditar
	private Moneda moneda;
	
	@OneToOne
	@JoinColumn(name = "VIGENCIATARIFA_ID")
	@NaoAuditar
	private VigenciaTarifa vigenciaTarifa;
	
	@Column(name = "PRECIOREDABIERTO")
	@AuditarAtributo(nome = "Tarifa volta em aberto")
	private BigDecimal precioredabierto;
	
	@OneToOne
	@JoinColumn(name = "ORIGEN_ID")
	@NaoAuditar
	private Parada origen;
	
	@OneToOne
	@JoinColumn(name = "DESTINO_ID")
	@NaoAuditar
	private Parada destino;
	
	@OneToOne
	@JoinColumn(name = "RUTA_ID")
	@NaoAuditar
	private Ruta ruta;
	
	@OneToOne
	@JoinColumn(name = "ORGAOCONCEDENTE_ID")
	@NaoAuditar
	private OrgaoConcedente orgaoConcedente;
	
	@Transient
	@NaoAuditar
	private TarifaOficial tarifaOficialClone;
	
	@Transient
	private Integer empresaId;
	
    @Column(name = "COMPOSICAO_DO_PEAJE")
	@NaoAuditar
    private String composicaoDoPeaje;

	public TarifaOficial() {
	}

	public OrgaoConcedente getOrgaoConcedente() {
		return orgaoConcedente;
	}

	public void setOrgaoConcedente(OrgaoConcedente orgaoConcedente) {
		this.orgaoConcedente = orgaoConcedente;
	}

	public Ruta getRuta() {
		return ruta;
	}

	public void setRuta(Ruta ruta) {
		this.ruta = ruta;
	}

	public BigDecimal getImportetpp() {
		return importetpp;
	}

	public void setImportetpp(BigDecimal importetpp) {
		this.importetpp = importetpp;
	}

	public Integer getTarifaOficialId() {
		return tarifaOficialId;
	}

	public void setTarifaOficialId(Integer tarifaOficialId) {
		this.tarifaOficialId = tarifaOficialId;
	}

	public BigDecimal getPrecio() {
		return precio;
	}

	public void setPrecio(BigDecimal precio) {
		this.precio = precio;
	}

	public BigDecimal getPreciooriginal() {
		return preciooriginal;
	}

	public void setPreciooriginal(BigDecimal preciooriginal) {
		this.preciooriginal = preciooriginal;
	}

	public String getStatustarifa() {
		return statustarifa;
	}

	public void setStatustarifa(String statustarifa) {
		this.statustarifa = statustarifa;
	}

	public Boolean getActivo() {
		return activo;
	}

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

	public Date getFecmodif() {
		return fecmodif;
	}

	public void setFecmodif(Date fecmodif) {
		this.fecmodif = fecmodif;
	}

	public Integer getUsuarioId() {
		return usuarioId;
	}

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

	public ClaseServicio getClaseServicio() {
		return claseServicio;
	}

	public void setClaseServicio(ClaseServicio claseServicio) {
		this.claseServicio = claseServicio;
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public Moneda getMoneda() {
		return moneda;
	}

	public void setMoneda(Moneda moneda) {
		this.moneda = moneda;
	}

	public Tramo getTramo() {
		return tramo;
	}

	public void setTramo(Tramo tramo) {
		this.tramo = tramo;
	}

	public VigenciaTarifa getVigenciaTarifa() {
		return vigenciaTarifa;
	}

	public void setVigenciaTarifa(VigenciaTarifa vigenciaTarifa) {
		this.vigenciaTarifa = vigenciaTarifa;
	}

	public BigDecimal getPrecioredabierto() {
		return precioredabierto;
	}

	public void setPrecioredabierto(BigDecimal precioredabierto) {
		this.precioredabierto = precioredabierto;
	}

	public Parada getOrigen() {
		return origen;
	}

	public void setOrigen(Parada origen) {
		this.origen = origen;
	}

	public Parada getDestino() {
		return destino;
	}

	public void setDestino(Parada destino) {
		this.destino = destino;
	}
	
	

	public String getComposicaoDoPeaje() {
		return composicaoDoPeaje;
	}

	public void setComposicaoDoPeaje(String composicaoDoPeaje) {
		this.composicaoDoPeaje = composicaoDoPeaje;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (tarifaOficialId != null ? tarifaOficialId.hashCode() : 0);
		return hash;
	}

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

	@Override
	public String toString() {
		return "com.rjconsultores.ventaboletos.entidad.TarifaOficial[tarifaOficialId=" + tarifaOficialId + "]";
	}

	public BigDecimal getImportetaxaembarque() {
		return importetaxaembarque;
	}

	public void setImportetaxaembarque(BigDecimal importetaxaembarque) {
		this.importetaxaembarque = importetaxaembarque;
	}

	public BigDecimal getImportepedagio() {
		return importepedagio;
	}

	public void setImportepedagio(BigDecimal importepedagio) {
		this.importepedagio = importepedagio;
	}

	public BigDecimal getImporteoutros() {
		return importeoutros;
	}

	public void setImporteoutros(BigDecimal importeoutros) {
		this.importeoutros = importeoutros;
	}

	public BigDecimal getImporteseguro() {
		return importeseguro;
	}

	public void setImporteseguro(BigDecimal importeseguro) {
		this.importeseguro = importeseguro;
	}

	@Override
	public void clonar() throws CloneNotSupportedException {
		tarifaOficialClone = new TarifaOficial();
		tarifaOficialClone = (TarifaOficial) this.clone();
		tarifaOficialClone.setEmpresaId(this.getMarca() != null && this.getMarca().getEmpresa() != null ? this.getMarca().getEmpresa().getEmpresaId() : null);
	}

	@Override
	public TarifaOficial getCloneObject() throws CloneNotSupportedException {
		return tarifaOficialClone;
	}

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

	public Integer getEmpresaId() {
		return empresaId;
	}

	public void setEmpresaId(Integer empresaId) {
		this.empresaId = empresaId;
	}
	
}
