// Settings Management JavaScript let currentSettings = {}; document.addEventListener("DOMContentLoaded", function () { checkAuth().then((authenticated) => { if (authenticated) { loadSettings(); } }); }); async function loadSettings() { try { const response = await fetch("/api/admin/settings", { credentials: "include", }); const data = await response.json(); if (data.success) { currentSettings = data.settings || {}; populateSettings(); } } catch (error) { console.error("Failed to load settings:", error); } } function populateSettings() { // General Settings if (currentSettings.general) { document.getElementById("siteName").value = currentSettings.general.siteName || ""; document.getElementById("siteTagline").value = currentSettings.general.siteTagline || ""; document.getElementById("siteEmail").value = currentSettings.general.siteEmail || ""; document.getElementById("sitePhone").value = currentSettings.general.sitePhone || ""; document.getElementById("timezone").value = currentSettings.general.timezone || "UTC"; } // Homepage Settings if (currentSettings.homepage) { document.getElementById("showHero").checked = currentSettings.homepage.showHero !== false; document.getElementById("showPromotions").checked = currentSettings.homepage.showPromotions !== false; document.getElementById("showPortfolio").checked = currentSettings.homepage.showPortfolio !== false; document.getElementById("showBlog").checked = currentSettings.homepage.showBlog !== false; } // Product Settings if (currentSettings.product) { document.getElementById("defaultProductStatus").value = currentSettings.product.defaultStatus || "active"; document.getElementById("productsPerPage").value = currentSettings.product.perPage || 12; document.getElementById("bestSellerLogic").value = currentSettings.product.bestSellerLogic || "manual"; document.getElementById("enableInventory").checked = currentSettings.product.enableInventory !== false; document.getElementById("showOutOfStock").checked = currentSettings.product.showOutOfStock !== false; } // Security Settings if (currentSettings.security) { document.getElementById("passwordExpiration").value = currentSettings.security.passwordExpiration || 90; document.getElementById("sessionTimeout").value = currentSettings.security.sessionTimeout || 60; document.getElementById("loginAttempts").value = currentSettings.security.loginAttempts || 5; document.getElementById("requireStrongPassword").checked = currentSettings.security.requireStrongPassword !== false; document.getElementById("enableTwoFactor").checked = currentSettings.security.enableTwoFactor || false; } // Appearance Settings if (currentSettings.appearance) { document.getElementById("accentColor").value = currentSettings.appearance.accentColor || "#667eea"; updateColorPreview(); } } function previewLogo() { const fileInput = document.getElementById("siteLogo"); const preview = document.getElementById("logoPreview"); if (fileInput.files && fileInput.files[0]) { const reader = new FileReader(); reader.onload = function (e) { preview.innerHTML = `Logo`; }; reader.readAsDataURL(fileInput.files[0]); } } function previewFavicon() { const fileInput = document.getElementById("siteFavicon"); const preview = document.getElementById("faviconPreview"); if (fileInput.files && fileInput.files[0]) { const reader = new FileReader(); reader.onload = function (e) { preview.innerHTML = `Favicon`; }; reader.readAsDataURL(fileInput.files[0]); } } function selectLayout(layout) { document.querySelectorAll(".theme-selector .theme-option").forEach((el) => { el.classList.remove("active"); }); event.target.closest(".theme-option").classList.add("active"); } function selectTheme(theme) { document.querySelectorAll(".theme-selector .theme-option").forEach((el) => { el.classList.remove("active"); }); event.target.closest(".theme-option").classList.add("active"); } function updateColorPreview() { const color = document.getElementById("accentColor").value; document.getElementById("colorPreview").style.backgroundColor = color; document.getElementById("colorValue").textContent = color; } async function saveSettings() { const settings = { general: { siteName: document.getElementById("siteName").value, siteTagline: document.getElementById("siteTagline").value, siteEmail: document.getElementById("siteEmail").value, sitePhone: document.getElementById("sitePhone").value, timezone: document.getElementById("timezone").value, }, homepage: { showHero: document.getElementById("showHero").checked, showPromotions: document.getElementById("showPromotions").checked, showPortfolio: document.getElementById("showPortfolio").checked, showBlog: document.getElementById("showBlog").checked, }, product: { defaultStatus: document.getElementById("defaultProductStatus").value, perPage: parseInt(document.getElementById("productsPerPage").value), bestSellerLogic: document.getElementById("bestSellerLogic").value, enableInventory: document.getElementById("enableInventory").checked, showOutOfStock: document.getElementById("showOutOfStock").checked, }, security: { passwordExpiration: parseInt( document.getElementById("passwordExpiration").value ), sessionTimeout: parseInt(document.getElementById("sessionTimeout").value), loginAttempts: parseInt(document.getElementById("loginAttempts").value), requireStrongPassword: document.getElementById("requireStrongPassword") .checked, enableTwoFactor: document.getElementById("enableTwoFactor").checked, }, appearance: { accentColor: document.getElementById("accentColor").value, }, }; try { const response = await fetch("/api/admin/settings", { method: "POST", headers: { "Content-Type": "application/json" }, credentials: "include", body: JSON.stringify(settings), }); const data = await response.json(); if (data.success) { showSuccess("Settings saved successfully!"); currentSettings = settings; } else { showError(data.message || "Failed to save settings"); } } catch (error) { console.error("Failed to save settings:", error); showError("Failed to save settings"); } } async function logout() { try { const response = await fetch("/api/admin/logout", { method: "POST", credentials: "include", }); if (response.ok) window.location.href = "/admin/login.html"; } catch (error) { console.error("Logout failed:", error); } } function showSuccess(message) { alert(message); } function showError(message) { alert("Error: " + message); }