/**
 * Password update section
 * 
 * @author Pierre HUBERT
 */

ComunicWeb.pages.settings.sections.password = {

	/**
	 * Open settings section
	 * 
	 * @param {object} args Additionnal arguments
	 * @param {HTMLElement} target The target for the page
	 */
	open: function(args, target){
		
		//Create a box
		var box = createElem2({
			appendTo: target,
			type: "div",
			class: "box box-primary box-password-settings"
		});

		//Add box header
		var boxHead = createElem2({
			appendTo: box,
			type: "div",
			class: "box-header",
		});
		var boxTitle = createElem2({
			appendTo: boxHead,
			type: "h3",
			class: "box-title",
			innerHTML: "Password update"
		});

		//Create box body
		var boxBody = createElem2({
			appendTo: box,
			type: "div",
			class: "box-body"
		});

		//Create a form contener
		var formContener = createElem2({
			appendTo: boxBody,
			type: "div"
		});

		//Ask the user to enter its old password
		var oldPasswordInput = createFormGroup({
			target: formContener,
			label: "Old password",
			placeholder: "Your old (current) password",
			type: "password"
		});

		// Ask the user to enter its new password
		var newPasswordInput = new PasswordInput(
			formContener,
			tr("New password"),
			tr("Your new password")
		);
		(async () => {
			try {
				let user = await userInfo(userID());
				newPasswordInput.setUser(user)

				let mail = await AccountInterface.getMail()
				newPasswordInput.setEmail(mail)
			} catch(e) {
				console.error(e);
				notify(tr("Failed to load your information to prepare password update!"), "danger");
			}
		})();

		//Ask the user to confirm its new password
		var confirmNewPasswordInput = createFormGroup({
			target: formContener,
			label: "Confirm your password",
			placeholder: "Your new password",
			type: "password"
		});

		//Add submit button
		var sendButton = createElem2({
			appendTo: formContener,
			type: "div",
			class: "btn btn-primary submit-form",
			innerHTML: "Update password"
		});

		//Make submit button lives
		sendButton.onclick = function(){

			//Check the old and the new password
			if(!ComunicWeb.common.formChecker.checkInput(oldPasswordInput, true)){
				notify(tr("Please specify your old password to update your password!"), "danger");
				return;
			}

			if(!newPasswordInput.isValid()){
				notify(tr("Please specify a valid new password!"), "danger");
				return;
			}

			//Check if the old and the new password are the same or not
			if(newPasswordInput.value !== confirmNewPasswordInput.value){
				notify(tr("The new password and its confirmation are not the same!"), "danger");
				return;
			}

			//Perform a request over the server
			sendButton.style.visibility = "hidden";

			//Perform a request over the server
			ComunicWeb.components.settings.interface.updatePassword(oldPasswordInput.value, newPasswordInput.value, function(result){

				sendButton.style.visibility = "visible";

				//Check for errors
				if(result.error){
					notify(tr("An error occurred while trying to update user password!"), "danger");
					return;
				}

				//Success
				notify(tr("Your password has been successfully updated !"));

				//Refresh current page to remove passwords (security)
				ComunicWeb.common.page.refresh_current_page();
			});
		}
	}

};