package frame.role;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import frame.config.Loader;
import frame.expression.GlobalVariant;
import frame.expression.IVariantRequestListener;
import frame.expression.VariantExistsException;
import frame.expression.VariantRequestParams;

public class UserVariantProvider extends Loader implements IVariantRequestListener {

	private static UserVariantProvider instance;
	private List<String> variantNames;
	
	
	public UserVariantProvider() {
		variantNames = new ArrayList<String>();
		initVariantNames();
	}
	
	public static synchronized UserVariantProvider getInstance() throws VariantExistsException {
		if (instance == null) {
			instance = new UserVariantProvider();
		}
		
		return instance;
	}

	@Override
	public String getStringValue(String name, VariantRequestParams params) {
		HttpServletRequest request = params.getRequest();
		
		if (request == null) {
			return null;
		}
		
		HttpSession session = request.getSession();
		OnlineUser onlineUser = (OnlineUser) session.getAttribute(OnlineUser.class.getSimpleName());
		
		if ("user.id".equals(name)) {
			return onlineUser.getId();
		}
		else if ("userid".equals(name)) {
			return onlineUser.getId();
		}
		else if ("username".equals(name)) {
			return onlineUser.getName();
		}
		else if ("user.name".equals(name)) {
			return onlineUser.getName();
		}
		else if ("user.emp_name".equals(name)) {
			return onlineUser.getEmp_name();
		}
		
		return null;
	}

	@Override
	public List<String> getVariantNames() {
		return variantNames;
	}
	
	public void initVariantNames() {
		variantNames.add("user.id");
		variantNames.add("userid");
		variantNames.add("user.emp_name");		
	}

	@Override
	public void load() throws Exception {
		GlobalVariant.regist(instance);
	}

	
}