package com.ejie.t17i.model;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.m62fb.utils.constants.AppConstantes;

/**
 * * T17Calle generated by UDA, 14-feb-2012 15:14:34.
 * 
XXXX
 */

public class Calle implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5468805867471138045L;
	private BigDecimal id;
	private Municipio municipio;
	private TipoVia tipoVia;
	private String nombreEs;
	private String nombreEu;
	private String nombreComboEs;
	private String nombreComboEu;
	private String estado;
	private BigDecimal calleCod;
	private List<Portal> portals = new ArrayList<Portal>();

	/**
	 * Constructor para crear un filtro solo por Id.
	 * 
	 * @param id
	 *            Identificador &uacute;nico del portal
	 */
	public Calle(BigDecimal id) {
		super();
		this.id = id;
	}

	/**
	 * Constructor para crear un filtro solo por calleCod.
	 * 
	 * @param calleCod
	 *            Identificador &uacute;nico del portal
	 * @param nombreComboEs
	 *            String
	 * @param nombreComboEu
	 *            String
	 */
	public Calle(BigDecimal calleCod, String nombreComboEs, String nombreComboEu) {
		super();
		this.calleCod = calleCod;
		this.nombreComboEs = nombreComboEs;
		this.nombreComboEu = nombreComboEu;
	}

	/**
	 * Method 'Calle'.
	 * 
	 */
	public Calle() {
	}

	/**
	 * Method 'Calle'.
	 * 
	 * @param id
	 *            Long
	 * @param nombreEs
	 *            String
	 * @param nombreEu
	 *            String
	 * @param estado
	 *            String
	 * @param calleCod
	 *            BigDecimal
	 * @param municipio
	 *            Municipio
	 * @param tipoVia
	 *            TipoVia
	 */
	public Calle(BigDecimal id, String nombreEs, String nombreEu,
			String estado, BigDecimal calleCod, Municipio municipio,
			TipoVia tipoVia) {
		this.id = id;
		this.municipio = municipio;
		this.tipoVia = tipoVia;
		this.nombreEs = nombreEs;
		this.nombreEu = nombreEu;
		this.estado = estado;
		this.calleCod = calleCod;
	}

	/**
	 * Method 'Calle'.
	 * 
	 * @param id
	 *            Long
	 * @param nombreEs
	 *            String
	 * @param nombreEu
	 *            String
	 * @param estado
	 *            String
	 * @param calleCod
	 *            BigDecimal
	 * @param municipio
	 *            Municipio
	 * @param tipoVia
	 *            TipoVia
	 */
	public Calle(BigDecimal id, String nombreEs, String nombreEu,
			String nombreComboEs, String nombreComboEu, String estado,
			BigDecimal calleCod, Municipio municipio, TipoVia tipoVia) {
		this.id = id;
		this.municipio = municipio;
		this.tipoVia = tipoVia;
		this.nombreEs = nombreEs;
		this.nombreEu = nombreEu;
		this.nombreComboEs = nombreComboEs;
		this.nombreComboEu = nombreComboEu;
		this.estado = estado;
		this.calleCod = calleCod;
	}

	/**
	 * Method 'Calle'.
	 * 
	 * @param id
	 *            Long
	 * @param nombreEs
	 *            String
	 * @param nombreEu
	 *            String
	 * @param nombreComboEs
	 *            String
	 * @param nombreComboEu
	 *            String
	 * @param estado
	 *            String
	 * @param calleCod
	 *            BigDecimal
	 * @param municipio
	 *            Municipio
	 * @param tipoVia
	 *            TipoVia
	 * @param portals
	 *            List<Portal>
	 */
	public Calle(BigDecimal id, String nombreEs, String nombreEu,
			String nombreComboEs, String nombreComboEu, String estado,
			BigDecimal calleCod, Municipio municipio, TipoVia tipoVia,
			List<Portal> portals) {

		this.id = id;
		this.municipio = municipio;
		this.tipoVia = tipoVia;
		this.nombreEs = nombreEs;
		this.nombreEu = nombreEu;
		this.nombreComboEs = nombreComboEs;
		this.nombreComboEu = nombreComboEu;
		this.estado = estado;
		this.calleCod = calleCod;
		this.portals = portals;
	}

	/**
	 * Method 'getId'.
	 * 
	 * @return BigDecimal
	 */

	public BigDecimal getId() {
		return this.id;
	}

	/**
	 * Method 'setId'.
	 * 
	 * @param id
	 *            BigDecimal
	 * @return
	 */

	public void setId(BigDecimal id) {
		this.id = id;
	}

	/**
	 * Method 'getMunicipio'.
	 * 
	 * @return Municipio
	 */
	public Municipio getMunicipio() {
		return this.municipio;
	}

	/**
	 * Method 'setMunicipio'.
	 * 
	 * @param municipio
	 *            Municipio
	 * @return
	 */

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	/**
	 * Method 'getTipoVia'.
	 * 
	 * @return TipoVia
	 */
	public TipoVia getTipoVia() {
		return this.tipoVia;
	}

	/**
	 * Method 'setTipoVia'.
	 * 
	 * @param tipoVia
	 *            TipoVia
	 * @return
	 */

	public void setTipoVia(TipoVia tipoVia) {
		this.tipoVia = tipoVia;
	}

	/**
	 * Method 'getNombreEs'.
	 * 
	 * @return String
	 */

	public String getNombreEs() {
		return (this.nombreEs != null ? this.nombreEs : this.nombreEu);
	}

	/**
	 * Method 'setNombreEs'.
	 * 
	 * @param nombreEs
	 *            String
	 * @return
	 */

	public void setNombreEs(String nombreEs) {
		this.nombreEs = nombreEs;
	}

	/**
	 * Method 'getNombreEu'.
	 * 
	 * @return String
	 */

	public String getNombreEu() {
		return (this.nombreEu != null ? this.nombreEu : this.nombreEs);
	}

	/**
	 * Method 'setNombreEu'.
	 * 
	 * @param nombreEu
	 *            String
	 * @return
	 */

	public void setNombreEu(String nombreEu) {
		this.nombreEu = nombreEu;
	}

	/**
	 * Method 'getEstado'.
	 * 
	 * @return String
	 */

	public String getEstado() {
		return this.estado;
	}

	/**
	 * Method 'setEstado'.
	 * 
	 * @param estado
	 *            String
	 * @return
	 */

	public void setEstado(String estado) {
		this.estado = estado;
	}

	/**
	 * Method 'getCalleCod'.
	 * 
	 * @return BigDecimal
	 */

	public BigDecimal getCalleCod() {
		return this.calleCod;
	}

	/**
	 * Method 'setCalleCod'.
	 * 
	 * @param calleCod
	 *            BigDecimal
	 * @return
	 */

	public void setCalleCod(BigDecimal calleCod) {
		this.calleCod = calleCod;
	}

	/**
	 * Method 'getPortals'.
	 * 
	 * @return List
	 */
	@JsonIgnore
	public List<Portal> getPortals() {
		return this.portals;
	}

	/**
	 * Method 'setPortals'.
	 * 
	 * @param portals
	 *            List
	 * @return
	 */
	public void setPortals(List<Portal> portals) {
		this.portals = portals;
	}

	/**
	 * Method 'setNombreComboEs'.
	 * 
	 * @param nombreComboEs
	 *            String
	 * @return
	 */
	public void setNombreComboEs(String nombreComboEs) {
		this.nombreComboEs = nombreComboEs;
	}

	/**
	 * Method 'setNombreComboEu'.
	 * 
	 * @param nombreComboEu
	 *            String
	 * @return
	 */
	public void setNombreComboEu(String nombreComboEu) {
		this.nombreComboEu = nombreComboEu;
	}

	/**
	 * 
	 * @return Texto con la calle completa en castellano
	 */
	public String getNombreComboEs() {
		if (this.nombreComboEs != null && !this.nombreComboEs.isEmpty()) {
			return nombreComboEs;
		}
		return this.tipoVia != null && this.tipoVia.getNombreEs() != null ? this.nombreEs
				+ " (" + this.tipoVia.getNombreEs() + ")"
				: this.nombreEs;
	}

	/**
	 * 
	 * @return Texto con la calle completa en euskera
	 */
	public String getNombreComboEu() {
		if (this.nombreComboEu != null && !this.nombreComboEu.isEmpty()) {
			return this.nombreComboEu;
		}
		return this.tipoVia != null && this.tipoVia.getNombreEu() != null ? this.nombreEu
				+ " (" + this.tipoVia.getNombreEu() + ")"
				: this.nombreEu;
	}

	/**
	 * Method 'getNombreCombo'. Devuelve la descripcion en el idioma actual.
	 * 
	 * @return String
	 */
	public String getNombreCombo() {
		if (AppConstantes.EU.equals(LocaleContextHolder.getLocale()
				.getLanguage())) {
			return this.getNombreComboEu();
		} else {
			return this.getNombreComboEs();
		}
	}

	/**
	 * 
	 * @return Texto con la calle completa en castellano
	 */
	public String getNombreCompletoEs() {
		return this.tipoVia != null && this.tipoVia.getNombreEs() != null ? this.tipoVia
				.getNombreEs() + " " + this.nombreEs
				: this.nombreEs;
	}

	/**
	 * 
	 * @return Texto con la calle completa en euskera
	 */
	public String getNombreCompletoEu() {
		return this.tipoVia != null && this.tipoVia.getNombreEu() != null ? this.nombreEu
				+ " " + this.tipoVia.getNombreEu()
				: this.nombreEu;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Calle other = (Calle) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
}
