package org.msh.tb.entities;

import org.jboss.seam.Component;
import org.jboss.seam.contexts.Contexts;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

@Embeddable
public class LocalizedNameComp implements Serializable {
	private static final long serialVersionUID = -957982131483299044L;

	@Column(name="name1", length=100, nullable=true)
	private String name1;

	@Column(name="name2", length=100)
	private String name2;


	public String getName1() {
		return name1;
	}
	public void setName1(String name1) {
		this.name1 = name1;
	}
	public String getName2() {
		return name2;
	}
	public void setName2(String name2) {
		this.name2 = name2;
	}
	
	/**
	 * Set the names to upper case
	 */
	public void toUpper() {
		if (name1 != null)
			name1 = name1.toUpperCase();
		
		if (name2 != null)
			name2 = name2.toUpperCase();
	}
	
	@Override
	public String toString() {
		return getDefaultName();
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name1 == null) ? 0 : name1.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		LocalizedNameComp other = (LocalizedNameComp) obj;
		if (name1 == null) {
			if (other.name1 != null)
				return false;
		} else if (!name1.equals(other.name1))
			return false;
		return true;
	}


	public String getDefaultName() {
		return (isAlternateLanguage() ? (name2 != null && (!name2.isEmpty())? name2: name1) : name1);
	}
	
	public void setDefaultName(String name) {
		if (isAlternateLanguage())
			 name1 = name;
		else name2 = name;
	}
	
	/**
	 * Check if language selected by the user is the alternate language defined in the workspace
	 * @return
	 */
	public boolean isAlternateLanguage() {
		if (Contexts.getSessionContext() == null)
			return false;
		UserLogin userLogin = (UserLogin)Contexts.getSessionContext().get("userLogin");
		Workspace ws = (Workspace)Component.getInstance("defaultWorkspace");
		
		if ((userLogin == null) || (ws == null))
			return true;

		String lang = ws.getAlternateLocale();
		if ((lang != null) && (lang.equals(userLogin.getUser().getLanguage())))
			 return true;
		else return false;
	}
}
