package com.ejie.ad74a.model;

import java.math.BigDecimal;
import java.util.Locale;

import org.apache.commons.lang.StringUtils;
import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ad74a.util.Utilidades;
import com.fasterxml.jackson.annotation.JsonIgnore;

public class Portal implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Long codPortal;
	private String bloque;
	private Long numero;
	private String bis;
	private Long codCalle;
	private Long codLocalidad;
	private String codPostal;
	private BigDecimal codTramo;

	private String portalCompletoEs;
	private String portalCompletoEu;

	private String numeroString;

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

	/**
	 * Method 'Portal'.
	 * 
	 * @param codPortal Long
	 */
	public Portal(Long codPortal) {
		super();
		this.codPortal = codPortal;
	}

	/**
	 * Method 'Portal'.
	 * 
	 * @param codPortal    Long
	 * @param bloque       String
	 * @param numero       Long
	 * @param bis          String
	 * @param codCalle     Long
	 * @param codLocalidad Long
	 * @param codPostal    String
	 * @param codTramo     BigDecimal
	 */
	public Portal(Long codPortal, String bloque, Long numero, String bis, Long codCalle, Long codLocalidad,
			String codPostal, BigDecimal codTramo) {
		super();
		this.codPortal = codPortal;
		this.bloque = bloque;
		this.numero = numero;
		this.bis = bis;
		this.codCalle = codCalle;
		this.codLocalidad = codLocalidad;
		this.codPostal = codPostal;
		this.codTramo = codTramo;
	}

	/**
	 * Method 'getCodPortal'.
	 * 
	 * @return Long
	 */

	public Long getCodPortal() {
		return this.codPortal;
	}

	/**
	 * Method 'setCodPortal'.
	 * 
	 * @param codPortal Long
	 * @return
	 */

	public void setCodPortal(Long codPortal) {
		this.codPortal = codPortal;
	}

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

	public String getBloque() {
		return this.bloque;
	}

	/**
	 * Method 'setBloque'.
	 * 
	 * @param bloque String
	 * @return
	 */

	public void setBloque(String bloque) {
		this.bloque = bloque;
	}

	/**
	 * Method 'getNumero'.
	 * 
	 * @return Long
	 */

	public Long getNumero() {
		return this.numero;
	}

	/**
	 * Method 'setNumero'.
	 * 
	 * @param numero Long
	 * @return
	 */

	public void setNumero(Long numero) {
		this.numero = numero;
	}

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

	public String getBis() {
		return this.bis;
	}

	/**
	 * Method 'setBis'.
	 * 
	 * @param bis String
	 * @return
	 */

	public void setBis(String bis) {
		this.bis = bis;
	}

	/**
	 * Method 'getCodCalle'.
	 * 
	 * @return Long
	 */

	public Long getCodCalle() {
		return this.codCalle;
	}

	/**
	 * Method 'setCodCalle'.
	 * 
	 * @param codCalle Long
	 * @return
	 */

	public void setCodCalle(Long codCalle) {
		this.codCalle = codCalle;
	}

	/**
	 * Method 'getCodLocalidad'.
	 * 
	 * @return Long
	 */

	public Long getCodLocalidad() {
		return this.codLocalidad;
	}

	/**
	 * Method 'setCodLocalidad'.
	 * 
	 * @param codLocalidad Long
	 * @return
	 */

	public void setCodLocalidad(Long codLocalidad) {
		this.codLocalidad = codLocalidad;
	}

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

	public String getCodPostal() {
		return this.codPostal;
	}

	/**
	 * Method 'setCodPostal'.
	 * 
	 * @param codPostal String
	 * @return
	 */

	public void setCodPostal(String codPostal) {
		this.codPostal = codPostal;
	}

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

	public BigDecimal getCodTramo() {
		return this.codTramo;
	}

	/**
	 * Method 'setCodTramo'.
	 * 
	 * @param codTramo BigDecimal
	 * @return
	 */

	public void setCodTramo(BigDecimal codTramo) {
		this.codTramo = codTramo;
	}

	/**
	 * Devuelve el numero de portal, concatenado al bis, si lo tuviera
	 * 
	 * @return String
	 */
	@JsonIgnore()
	public String getPortal() {
		StringBuilder sb = new StringBuilder(String.valueOf(this.numero));
		if (!Utilidades.isEmpty(this.bis)) {
			sb.append("-").append(this.bis);
		}

		return sb.toString();
	}

	/**
	 * Metodo que crea el string con el portal completo, para la vista
	 * 
	 * @param idioma String
	 * 
	 * @return String
	 */
	private String crearPortalCompleto(String idioma) {

		String numero = "Num";
		String bloque = "Bloque";
		if ("EU".equals(idioma)) {
			numero = "Zenb";
			bloque = "Blokea";
		}

		StringBuilder portalCompleto = new StringBuilder();
		if (this.getNumero() != null && !Utilidades.isEmpty(this.getNumero().toString())) {

			// Numero
			portalCompleto.append(numero).append(": ").append(this.getNumero());
			// Bis
			if (StringUtils.isNotBlank(this.getBis())) {
				portalCompleto.append("-").append(this.getBis());
			}
			// Bloque
			if (StringUtils.isNotBlank(this.getBloque())) {
				portalCompleto.append(" ").append(bloque).append(": ").append(this.getBloque());
			}
		}
		return portalCompleto.toString();
	}

	/**
	 * @return the portalCompletoEs
	 */
	public String getPortalCompleto() {
		Locale locale = LocaleContextHolder.getLocale();
		if (locale.getLanguage().equalsIgnoreCase("EU")) {
			return this.getPortalCompletoEu();
		} else {
			return this.getPortalCompletoEs();
		}
	}

	/**
	 * @return the portalCompletoEs
	 */
	public String getPortalCompletoEs() {
		if (this.portalCompletoEs == null) {
			this.portalCompletoEs = this.crearPortalCompleto("ES");
		}
		return this.portalCompletoEs;
	}

	/**
	 * @param portalCompletoEs the portalCompletoEs to set
	 */
	public void setPortalCompletoEs(String portalCompletoEs) {
		this.portalCompletoEs = portalCompletoEs;
	}

	/**
	 * @return the portalCompletoEu
	 */
	public String getPortalCompletoEu() {
		if (this.portalCompletoEu == null) {
			this.portalCompletoEu = this.crearPortalCompleto("EU");
		}
		return this.portalCompletoEu;
	}

	/**
	 * @param portalCompletoEu the portalCompletoEu to set
	 */
	public void setPortalCompletoEu(String portalCompletoEu) {
		this.portalCompletoEu = portalCompletoEu;
	}

	/**
	 * @return the numeroString
	 */
	public String getNumeroString() {
		return this.numeroString;
	}

	/**
	 * @param numeroString the numeroString to set
	 */
	public void setNumeroString(String numeroString) {
		this.numeroString = numeroString;
	}

	/**
	 * Intended only for logging and debugging.
	 * 
	 * Here, the contents of every main field are placed into the result.
	 * 
	 * @return String
	 */
	@Override()
	public String toString() {
		StringBuilder result = new StringBuilder();
		result.append(this.getClass().getName()).append(" Object { ");
		// Clave compuesta
		result.append("[ codPortal: ").append(this.codPortal).append(" ]");
		result.append(", [ bloque: ").append(this.bloque).append(" ]");
		result.append(", [ numero: ").append(this.numero).append(" ]");
		result.append(", [ bis: ").append(this.bis).append(" ]");
		result.append(", [ codCalle: ").append(this.codCalle).append(" ]");
		result.append(", [ codLocalidad: ").append(this.codLocalidad).append(" ]");
		result.append(", [ codPostal: ").append(this.codPostal).append(" ]");
		result.append(", [ codTramo: ").append(this.codTramo).append(" ]");
		result.append("}");
		return result.toString();
	}

}
