package eu.dnetlib.enabling.aas.utils;

import java.util.Iterator;
import java.util.Set;

import eu.dnetlib.enabling.aas.service.A2Constants;



/**
 * Generater simple resources for testing purposes.
 * @author mhorst
 *
 */
public class ResourcesGenerator {
	
	public static final String RESOURCE_TYPE_DRIVER_TEST	 	= "DriverTestDSResourceType";
	public static final String RESOURCE_KIND_DRIVER_TEST	 	= "DriverTestDSResources";
	
	public static String IS_COLLECTION_DRIVER_TEST_PATH = A2Constants.IS_COLLECTION_DRIVER_ROOT_PATH + 
							RESOURCE_KIND_DRIVER_TEST + '/' + 
							RESOURCE_TYPE_DRIVER_TEST;

	public static final String RESOURCE_TYPE_USER_RESOURCE	 	= "UserDSResourceType";
	public static final String RESOURCE_KIND_USER_RESOURCE	 	= "UserDSResources";
	
	public static String IS_COLLECTION_DRIVER_USER_RESOURCE_PATH = A2Constants.IS_COLLECTION_DRIVER_ROOT_PATH + 
							RESOURCE_KIND_USER_RESOURCE + '/' + 
							RESOURCE_TYPE_USER_RESOURCE;
	
	public static String generateTestProfile(String resourceId) {
		return "<RESOURCE_PROFILE><HEADER>"
		+ "<RESOURCE_IDENTIFIER value=\"\"/>"
		+ "<RESOURCE_URI value=\"\"/>"
		+ "<DATE_OF_CREATION value=\"\"/>"
		+ "<RESOURCE_KIND value=\""
		+ RESOURCE_KIND_DRIVER_TEST + "\"/>"
		+ "<RESOURCE_TYPE value=\""
		+ RESOURCE_TYPE_DRIVER_TEST + "\"/></HEADER>"
		+ "<BODY><CONFIGURATION>"
		+ "<resourceId>"+resourceId+"</resourceId>"
		+ "<lastAccessTime>"+System.currentTimeMillis()+"</lastAccessTime>"
		+ "</CONFIGURATION></BODY></RESOURCE_PROFILE>";
	}
	
	public static String generateUserProf(String email) {
		return "<RESOURCE_PROFILE>" +
					"<HEADER>" +
						"<RESOURCE_IDENTIFIER value=\"\"/>" +
						"<RESOURCE_TYPE value=\"UserDSResourceType\"/>" +
						"<RESOURCE_KIND value=\"UserDSResources\"/>" +
						"<RESOURCE_URI value=\"\"/>" +
						"<DATE_OF_CREATION value=\"\"/>" +
					"</HEADER>" +
					"<BODY>" +
						"<CONFIGURATION>" +
						"<PERSONAL_INFO>" +
							"<FIRST_NAME/>" +
							"<LAST_NAME/>" +
							"<INSTITUTION/>" +
							"<EMAIL value=\"" + email + "\"/>" +
							"<PASSWORD value=\"driver\"/>" +
							"<ACTIVATION_ID value=\"" + System.currentTimeMillis() + "\"/>" +
							"<ACTIVE value=\"true\"/>" +
						"</PERSONAL_INFO>" +
						"<ROLES/>" +
						"<COMMUNITIES>" +
							"<INCLUDE_IN_SEARCH/>" +
						"</COMMUNITIES>" +
						"<LAYOUT>BRIEF</LAYOUT>" +
						"<RECOMMENDATION SEND_EMAIL=\"false\">" +
							"<RECOMMENDATIONS/>" +
							"</RECOMMENDATION>" +
						"</CONFIGURATION>" +
						"<STATUS/>" +
						"<SECURITY_PARAMETERS>" +
							"<SECURITY_PARAMETER>value</SECURITY_PARAMETER>" +
						"</SECURITY_PARAMETERS>" +
					"</BODY>" +
				"</RESOURCE_PROFILE>";
	}
	
	public static String generateSecProf(String resourceId, Set<String> secProfRoles) {
		StringBuffer secProfBuff = new StringBuffer(); 
		secProfBuff.append("<RESOURCE_PROFILE>" +
					"<HEADER>" +
					  "<RESOURCE_IDENTIFIER value=\"\"/>" +
					  "<RESOURCE_KIND value=\"SecurityProfileDSResources\"/>" +
					  "<RESOURCE_TYPE value=\"SecurityProfileDSResourceType\"/>" +
					  "<RESOURCE_URI value=\"\"/>" +
					  "<DATE_OF_CREATION value=\"\"/>" +
					"</HEADER>" +
					"<BODY>" +
					"<CONFIGURATION>" +
					  "<resourceId>" + resourceId + "</resourceId>" +
					  "<identities>" +
					  "  <text>driver</text>" +
					  "  <type>password</type>" +
					  "</identities>");
		if (secProfRoles!=null && secProfRoles.size()>0) {
			Iterator<String> it = secProfRoles.iterator();
			while(it.hasNext()) {
				secProfBuff.append("<identities>");
				secProfBuff.append("<text>"+it.next()+"</text>");
				secProfBuff.append("<type>driver.security.identity.role</type>");
				secProfBuff.append("</identities>");
			}
			
		}
		secProfBuff.append("</CONFIGURATION>" +
					"</BODY>" +
				"</RESOURCE_PROFILE>");
		return secProfBuff.toString();
	}
}
