package com.cisco.webservices.impl;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.TransportInDescription;
import org.apache.axis2.engine.AxisConfiguration;

import com.cisco.repository.UserStore;
import com.cisco.webservices.beans.UserBean;
import com.cisco.webservices.interfaces.UserMgmtServiceInterface;

public class UserMgmtServiceImpl  implements UserMgmtServiceInterface{
	static UserStore store;
	 private static String baseURL = null;
static {
	  store = UserStore.getInstance();
}
	

	public String[] getAllUsers() {	
		UserBean[] users =  store.getAllUsers();
		String[] userUrls = new String[users.length];
		for(int i=0;i<users.length;i++){
			userUrls[i] = getBaseURL() + "User/" + users[i].getUserId();
		}
		return userUrls;
	}
	
	
	public String updateUser(UserBean uBean) throws Exception{
		try{
			System.out.println("the name of the user to be saved is :"+uBean.getFirstName());
			 store.updateUser(uBean);
			 return getBaseURL() + "User/" + uBean.getUserId();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		
	}

	public void deleteStudent(Long userID) throws Exception {
		try{
			store.deleteUser(userID);
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		
	}

	@Override
	public String createUser(UserBean uBean) throws Exception {
		try{
			UserBean users[] = new UserBean[1];
			users[0] = uBean;
			store.addUsers(users);
			return getBaseURL() + "User/" + uBean.getUserId();
		}catch(Exception e){
			throw e;
		}
		
		
		
	}


	
	

	@Override
	public String getUser(Long userID) throws Exception {
		try{
		 UserBean ubean =  store.getUser(userID);
		 return getBaseURL() + "User/" + ubean.getUserId();
		}catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		
	}
	
	  private String getBaseURL() {
	        if (baseURL == null) {
	            MessageContext messageContext = MessageContext.getCurrentMessageContext();
	            AxisConfiguration configuration = messageContext
	                    .getConfigurationContext().getAxisConfiguration();
	            TransportInDescription inDescription = configuration.getTransportIn("http");
	            try {
	                EndpointReference[] eprs = inDescription.getReceiver()
	                        .getEPRsForService(messageContext.getAxisService().getName(), null);
	                baseURL = eprs[0].getAddress();
	            } catch (AxisFault axisFault) {     
	              System.out.println(axisFault);
	            }
	        }
	        return baseURL;
	    }

	


}
