import { c } from './files.js'
const ctage = {
"Mo": [],
"Di": [],
"Mi": [],
"Do": [],
"Fr": []
}
// returns time difference in 15-minute intervalls
function timediff(a, b) {
const time = "1970-01-01 ";
return (new Date(time + a) - new Date(time + b)) / 1000 / 60 / 15;
}
export function gettimefromintervalls(x) {
let y = 15 * x / 60 + 8
let z = y.toString().padStart(2, '0');
if (Math.round(y) == y) return `
${z}:00 | `;
return ""
}
function sortTage(tage) {
for (let tag in tage) {
tage[tag].sort((a, b) => {
return timediff(a.von, b.von)
});
}
return tage;
}
function runtimes(tage, tage_runtimes) {
for (let tag in tage) {
for (let eintrag in tage[tag]) {
// could be redundant
if (eintrag == tage[tag].length) break;
let a = tage[tag][eintrag];
let runtime = timediff(a.bis, a.von)
tage_runtimes[tag].push({
"name": a.name,
"raum": a.raum,
"runtime": runtime,
});
}
}
return tage_runtimes;
}
function bufferUp(tage) {
tage = sortTage(tage);
for (let tag in tage) {
if (tage[tag][0].von != "08:00") {
tage[tag].splice(0, 0, {
"name": "BUFFER",
"raum": "BUFFER",
"von": "08:00",
"bis": tage[tag][0].von,
})
}
if (tage[tag][tage[tag].length - 1].bis != "19:00") {
tage[tag].push({
"name": "BUFFER",
"raum": "BUFFER",
"von": tage[tag][tage[tag].length - 1].bis,
"bis": "19:00",
})
}
}
for (let tag in tage) {
for (let eintrag in tage[tag]) {
if (eintrag == tage[tag].length - 1) break;
let a = tage[tag][eintrag];
let b = tage[tag][eintrag - -1];
let runtime = timediff(b.von, a.bis)
if (runtime > 0) {
tage[tag].push({
"name": "BUFFER",
"raum": "BUFFER",
"von": a.bis,
"bis": b.von,
});
}
}
}
return tage;
}
export function prepare(forICS = false) {
let tage = structuredClone(ctage);
let tage_runtimes = structuredClone(ctage);
for (let eintrag of c.eintraege) {
let eintragName = Object.keys(eintrag)[0];
eintrag = eintrag[eintragName]
for (let veranstaltung in eintrag) {
for (let termin of eintrag[veranstaltung]) {
tage[termin[0]].push({
"name": `${eintragName.toString()} / ${veranstaltung.toString()}`,
"raum": termin[3],
"von": termin[1].replace("h", ":"),
"bis": termin[2].replace("h", ":"),
})
}
}
}
if (forICS) {
return tage = sortTage(tage);
}
tage = bufferUp(tage, ctage);
tage = sortTage(tage);
return runtimes(tage, tage_runtimes)
}