// Imports
import {htmlOlCommandsVariables, generateUUID} from './../../main';
import {
getVariableTypeByValue,
htmlVariableScheme,
variableScheme,
VariableType
} from "./variables-schemes";
import {deleteOperationByVariable} from "../operations/operations";
// Imports
export const variables = [];
let variablesIndex = 0;
// Creating variable
export function createVariable () {
const variable = Object.assign({}, variableScheme);
variable.hash = generateUUID().replaceAll('-', '');
variable.name = 'var' + variablesIndex;
variable.type = VariableType[0];
variable.value = variable.type.defaultValue;
variables.push(variable);
variablesIndex++;
let htmlVariable = htmlVariableScheme();
htmlVariable = htmlVariable.replaceAll('', variable.hash);
htmlVariable = htmlVariable.replaceAll('', variable.name);
htmlOlCommandsVariables.insertAdjacentHTML('beforeend', htmlVariable);
document.getElementById(`variable${variable.hash}Type`).addEventListener('change', ev => {
const variableHash = ev.target.getAttribute('variable-id');
updateVariable(variableHash);
});
document.getElementById(`variable${variable.hash}Name`).addEventListener('change', ev => {
const variableHash = ev.target.getAttribute('variable-id');
updateVariable(variableHash);
});
document.getElementById(`variable${variable.hash}Value`).addEventListener('change', ev => {
const variableHash = ev.target.getAttribute('variable-id');
updateVariable(variableHash);
});
document.getElementById(`variable${variable.hash}Delete`).addEventListener('click', ev => {
const variableHash = ev.target.getAttribute('variable-id');
deleteVariable(variableHash);
});
updateResume(variable.hash);
updateAllVariableSelect();
// Changing focus to the variable type after creation for screen readers
document.getElementById(`variable${variable.hash}Type`).focus();
}
// *********************************************************************************
// Updating variable
// *********************************************************************************
let variableName;
let variableType;
let variableValue;
function updateVariable (hash) {
const variable = getVariableByHash(hash);
variableName = document.getElementById(`variable${hash}Name`).value;
if (variable.name !== variableName) {
variable.name = variableName;
}
variableType = getVariableTypeByValue(document.getElementById(`variable${hash}Type`).value);
if (variable.type !== variableType) {
variable.type = variableType;
document.getElementById(`variable${hash}Value`).type = variable.type.htmlType;
document.getElementById(`variable${hash}Value`).value = variable.type.defaultValue;
}
variableValue = document.getElementById(`variable${hash}Value`).value;
if (variable.value !== variableValue) {
variable.value = variableValue;
}
updateResume(hash);
}
// *********************************************************************************
// Deleting variable
export function deleteVariable (hash) {
const variable = getVariableByHash(hash);
document.getElementById(`variable${hash}Li`).remove();
deleteOperationByVariable(variable);
variables.splice(variables.indexOf(variable), 1);
updateAllVariableSelect();
}
// Deleting all variable
export function deleteAllVariable () {
for (let i = 0; i < variables.length; i++) {
document.getElementById(`variable${variables[i].hash}Li`).remove();
}
variables.length = 0
}
// ***********************************************************************
// Updating variable resume
// ***********************************************************************
function updateResume (hash) {
document.getElementById(`variable${hash}Resume`).setAttribute('title', generateResume(hash));
}
function generateResume (hash) {
const variable = getVariableByHash(hash);
return `${variable.type.name} ${variable.name}, recebe ${variable.value}`;
}
// ***********************************************************************
// Update all variable select
// **********************************************************************
function updateAllVariableSelect () {
const variableSelects = document.getElementsByName('variableSelect');
let variablesSelect = variables.length === 0 ? `` : ``;
for (let i = 0; i < variables.length; i++) {
variablesSelect += ``
}
for (let i = 0; i < variableSelects.length; i++) {
const selectedOption = variableSelects[i].value;
variableSelects[i].innerHTML = variablesSelect;
variableSelects[i].value = selectedOption;
}
}
// *********************************************************************************
// Util
// *********************************************************************************
export function getVariableByHash (hash) {
for (let i = 0; i < variables.length; i++) {
if (variables[i].hash === hash)
return variables[i];
}
return null;
}
// *********************************************************************************