import {serializeFormData, deserializeFormData, storeData, getData} from "./utils.js";
import {combatModifiers, rpModifiers, features, spellSlots} from "./songs-meta.js"
window.addEventListener("DOMContentLoaded", init);
function init () {
buildModifiers("#combat-modifiers", combatModifiers);
buildModifiers("#rp-modifiers", rpModifiers);
buildFeatures("#features", features);
buildSpells("#spellcasting-spells", spellSlots);
let data = getData();
deserializeFormData("#character-data", data);
calculateModifiers(combatModifiers);
calculateModifiers(rpModifiers)
calculateSpellCasting();;
let inputs = document.querySelectorAll("input, select, textarea");
for (let i = 0; i < inputs.length; i++) {
inputs[i].addEventListener("input", refresh);
}
}
function refresh () {
calculateModifiers(combatModifiers);
calculateModifiers(rpModifiers);
calculateSpellCasting();
let data = serializeFormData("#character-data");
storeData(data);
}
function buildModifiers(container, data) {
let area = document.querySelector(container);
for (let i in data) {
let category = data[i];
let categoryDiv = document.createElement("div");
area.append(categoryDiv);
categoryDiv.style = "display: contents;";
categoryDiv.innerHTML = `
${category.category}
`;
for (let j in data[i].items) {
let item = data[i].items[j];
if (item.type === "full") {
categoryDiv.innerHTML += `
${item.display ? item.display : item.name}
`;
}
else if (item.type === "training-only"){
categoryDiv.innerHTML += `
${item.display ? item.display : item.name}
`;
}
}
}
}
function buildFeatures (container) {
let area = document.querySelector(container);
for (let i in features) {
let feature = features[i];
area.innerHTML += `
${feature.name}
${feature.level}
`;
}
}
function buildSpells (container, numSpells) {
let area = document.querySelector(container);
for (let i = 0; i < numSpells; i++) {
area.innerHTML += `
`;
}
}
function calculateModifiers (data) {
for (let i in data) {
let category = data[i];
for (let j in data[i].items) {
let item = data[i].items[j];
setModifierVal(category.category, item.name, item.value);
}
}
}
function calculateSpellCasting () {
let attribute = document.querySelector("#spellcasting-attribute").value;
let baseVal = 0;
if (attribute === "int") { baseVal = Number(document.querySelector("#int").value); }
else if (attribute === "cha") { baseVal = Number(document.querySelector("#cha").value); }
let training = Number(document.querySelector("#spellcasting-training").value);
let mb = Number(document.querySelector("#spellcasting-mb").checked);
let mastery = Number(document.querySelector("#mastery").value);
let modifier = baseVal + training + (mb * mastery);
document.querySelector("#spellcasting-modifier").innerText = ` = ${modifier}`;
document.querySelector("#spellcasting-dc").innerText = ` = ${8 + modifier}`;
}
function setModifierVal (category, name, value) {
let e = {};
e.STR = Number(document.querySelector("#str").value);
e.END = Number(document.querySelector("#end").value);
e.AGI = Number(document.querySelector("#agi").value);
e.WIT = Number(document.querySelector("#wit").value);
e.INT = Number(document.querySelector("#int").value);
e.CHA = Number(document.querySelector("#cha").value);
e.training = Number(document.querySelector(`#${category}-${name}-training`).value);
e.mb = Number(document.querySelector(`#${category}-${name}-mb`).checked);
e.mastery = Number(document.querySelector("#mastery").value);
document.querySelector(`#${category}-${name}-result`).innerText = ` = ${value(e)}`;
}