/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

 package org.apache.ranger.service;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ranger.common.AppConstants;
import org.apache.ranger.common.StringUtil;
import org.apache.ranger.common.view.VTrxLogAttr;
import org.apache.ranger.entity.XXAsset;
import org.apache.ranger.entity.XXPortalUser;
import org.apache.ranger.entity.XXTrxLog;
import org.apache.ranger.util.RangerEnumUtil;
import org.apache.ranger.view.VXPortalUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("singleton")
public class XPortalUserService extends
		XPortalUserServiceBase<XXPortalUser, VXPortalUser> {

	@Autowired
	RangerEnumUtil xaEnumUtil;

	@Autowired
	StringUtil stringUtil;

	static HashMap<String, VTrxLogAttr> trxLogAttrs = new HashMap<String, VTrxLogAttr>();
	static {
		trxLogAttrs.put("loginId",
				new VTrxLogAttr("loginId", "Login ID", false));
		trxLogAttrs.put("status", new VTrxLogAttr("status",
				"Activation Status", false));
		trxLogAttrs.put("firstName", new VTrxLogAttr("firstName", "First Name",
				false));
		trxLogAttrs.put("lastName", new VTrxLogAttr("lastName", "Last Name",
				false));
		trxLogAttrs.put("emailAddress", new VTrxLogAttr("emailAddress",
				"Email Address", false));
		trxLogAttrs.put("publicScreenName", new VTrxLogAttr("publicScreenName",
				"Public Screen Name", false));
	}

	@Override
	protected void validateForCreate(VXPortalUser vObj) {
		// TODO Auto-generated method stub

	}

	@Override
	protected void validateForUpdate(VXPortalUser vObj, XXPortalUser mObj) {
		// TODO Auto-generated method stub

	}

	public List<XXTrxLog> getTransactionLog(VXPortalUser vUser, String action) {
		return getTransactionLog(vUser, null, action);
	}

	public List<XXTrxLog> getTransactionLog(VXPortalUser vObj,
			XXPortalUser xObj, String action) {
		if (vObj == null || action == null || ("update".equalsIgnoreCase(action) && xObj == null)) {
			return null;
		}

		List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
		Field[] fields = vObj.getClass().getDeclaredFields();

		try {
			Field nameField = vObj.getClass().getDeclaredField("loginId");
			nameField.setAccessible(true);
			String objectName = "" + nameField.get(vObj);

			for (Field field : fields) {
				field.setAccessible(true);
				String fieldName = field.getName();
				if (!trxLogAttrs.containsKey(fieldName)) {
					continue;
				}

				VTrxLogAttr vTrxLogAttr = trxLogAttrs.get(fieldName);

				XXTrxLog xTrxLog = new XXTrxLog();
				xTrxLog.setAttributeName(vTrxLogAttr
						.getAttribUserFriendlyName());

				String value = null;
				boolean isEnum = vTrxLogAttr.isEnum();
				if (isEnum) {
					String enumName = XXAsset.getEnumName(fieldName);
					int enumValue = field.get(vObj) == null ? 0 : Integer
							.parseInt("" + field.get(vObj));
					value = xaEnumUtil.getLabel(enumName, enumValue);
				} else {
					value = "" + field.get(vObj);
				}

				if ("create".equalsIgnoreCase(action)) {
					if (stringUtil.isEmpty(value)) {
						continue;
					}
					xTrxLog.setNewValue(value);
				} else if ("delete".equalsIgnoreCase(action)) {
					xTrxLog.setPreviousValue(value);
				} else if ("update".equalsIgnoreCase(action)) {
					String oldValue = null;
					Field[] xFields = xObj.getClass().getDeclaredFields();

					for (Field xField : xFields) {
						xField.setAccessible(true);
						String xFieldName = xField.getName();

						if (fieldName.equalsIgnoreCase(xFieldName)) {
							if (isEnum) {
								String enumName = XXAsset
										.getEnumName(xFieldName);
								int enumValue = xField.get(xObj) == null ? 0
										: Integer.parseInt(""
												+ xField.get(xObj));
								oldValue = xaEnumUtil.getLabel(enumName,
										enumValue);
							} else {
								oldValue = xField.get(xObj) + "";
							}
							break;
						}
					}
					if ("emailAddress".equalsIgnoreCase(fieldName)) {
						if (!stringUtil.validateEmail(oldValue)) {
							oldValue = "";
						}
						if (!stringUtil.validateEmail(value)) {
							value = "";
						}
					}
					if (value.equalsIgnoreCase(oldValue)) {
						continue;
					}
					xTrxLog.setPreviousValue(oldValue);
					xTrxLog.setNewValue(value);
				}

				xTrxLog.setAction(action);
				xTrxLog.setObjectClassType(AppConstants.CLASS_TYPE_USER_PROFILE);
				xTrxLog.setObjectId(vObj.getId());
				xTrxLog.setObjectName(objectName);
				trxLogList.add(xTrxLog);
			}
		} catch (IllegalArgumentException e) {
			logger.info(
					"Caught IllegalArgumentException while"
							+ " getting Transaction log for user : "
							+ vObj.getLoginId(), e);
		} catch (NoSuchFieldException e) {
			logger.info(
					"Caught NoSuchFieldException while"
							+ " getting Transaction log for user : "
							+ vObj.getLoginId(), e);
		} catch (SecurityException e) {
			logger.info(
					"Caught SecurityException while"
							+ " getting Transaction log for user : "
							+ vObj.getLoginId(), e);
		} catch (IllegalAccessException e) {
			logger.info(
					"Caught IllegalAccessException while"
							+ " getting Transaction log for user : "
							+ vObj.getLoginId(), e);
		}
		return trxLogList;
	}

	public void updateXXPortalUserReferences(long xXPortalUserId){
		daoManager.getXXAsset().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXAsset().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXAuditMap().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXAuditMap().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXAuthSession().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXAuthSession().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXCredentialStore().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXCredentialStore().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXGroup().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXGroup().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXGroupGroup().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXGroupGroup().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXGroupUser().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXGroupUser().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPermMap().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPermMap().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyExportAudit().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyExportAudit().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPortalUser().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPortalUser().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPortalUserRole().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPortalUserRole().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXResource().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXResource().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXTrxLog().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTrxLog().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXUser().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXUser().updateUserIDReference("upd_by_id", xXPortalUserId);
		//0.5
		daoManager.getXXServiceDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXService().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXService().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicy().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicy().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXServiceConfigDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceConfigDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXResourceDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXResourceDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXAccessTypeDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXAccessTypeDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXAccessTypeDefGrants().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXAccessTypeDefGrants().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyConditionDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyConditionDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXContextEnricherDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXContextEnricherDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXEnumDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXEnumDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXEnumElementDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXEnumElementDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXServiceConfigMap().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceConfigMap().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyResource().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyResource().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyResourceMap().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyResourceMap().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyItem().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyItem().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemAccess().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemAccess().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemCondition().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemCondition().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemUserPerm().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemUserPerm().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemGroupPerm().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXPolicyItemGroupPerm().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXModuleDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXModuleDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXUserPermission().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXUserPermission().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXGroupPermission().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXGroupPermission().updateUserIDReference("upd_by_id", xXPortalUserId);
		//0.6
		daoManager.getXXTagDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTagDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXTagAttributeDef().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTagAttributeDef().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXServiceResource().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceResource().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXServiceResourceElement().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceResourceElement().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXServiceResourceElementValue().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXServiceResourceElementValue().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXTag().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTag().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXTagAttribute().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTagAttribute().updateUserIDReference("upd_by_id", xXPortalUserId);
		daoManager.getXXTagResourceMap().updateUserIDReference("added_by_id", xXPortalUserId);
		daoManager.getXXTagResourceMap().updateUserIDReference("upd_by_id", xXPortalUserId);
	}
}
