package com.rjconsultores.ventaboletos.entidad;

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

@Entity
@SequenceGenerator(name = "MDCONTA_SEQ", sequenceName = "MDCONTA_SEQ", allocationSize = 1)
@Table(name = "MD_CONTA")
public class ContaMD implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "MDCONTA_SEQ")
    @Column(name = "CONTA_ID")
    private Integer contaId;
    
    @Column(name = "NOME")
    private String nome;
    
    @Column(name = "TIPO")
    private String tipo;

    @Column(name = "CODIGOCONTABIL")
    private Integer codigoContabil;
    
    @Column(name = "DOCASSOCIADO")
    private Boolean docAssociado;
    
    @Column(name = "CANCELAMENTO")
    private Boolean cancelamento;
    
    @Column(name = "STATUS")
    private Boolean status;
    
    @Column(name = "ORIGEM")
    private String origem;
    
    @Column(name = "REFERENCIA")
    private String referencia;
    
    @Column(name = "FECMODIF")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecmodif;
    
    @Column(name = "USUARIO_ID")
    private Integer usuarioId;
    
    @Column(name = "ACTIVO")
    private Boolean activo;

    public ContaMD() {
    	
    }

	public Integer getContaId() {
		return contaId;
	}

	public void setContaId(Integer contaId) {
		this.contaId = contaId;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public Integer getCodigoContabil() {
		return codigoContabil;
	}

	public void setCodigoContabil(Integer codigoContabil) {
		this.codigoContabil = codigoContabil;
	}

	public Boolean getDocAssociado() {
		return docAssociado;
	}

	public void setDocAssociado(Boolean docAssociado) {
		this.docAssociado = docAssociado;
	}

	public Boolean getCancelamento() {
		return cancelamento;
	}

	public void setCancelamento(Boolean cancelamento) {
		this.cancelamento = cancelamento;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}

	public String getOrigem() {
		return origem;
	}

	public void setOrigem(String origem) {
		this.origem = origem;
	}

	public String getReferencia() {
		return referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	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 Boolean getActivo() {
		return activo;
	}

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

	public String getTipoDesc() {
		if (tipo == null) {
			return "";
		}
		
		return tipo.equals("C") ? "Crédito" : "Débito";
	}

	public String getStatusDesc() {
		if (status == null) {
			return "";
		}
		
		return status ? "Ativo" : "Inativo";
	}
	
	@Override
	public String toString() {
		return getNome();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((getContaId() == null) ? 0 : getContaId().hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof ContaMD))
			return false;
		ContaMD other = (ContaMD) obj;
		if (getContaId() == null) {
			if (other.getContaId() != null)
				return false;
		} else if (!getContaId().equals(other.getContaId()))
			return false;
		return true;
	}
}
