// settingsManager.ts
import { changeSettings, getSettings } from "@/app/backend/database";

// Method to export localStorage to a JSON object
export function exportSettings(): string {
    const settings: { [key: string]: string } = {};

    // Loop through all keys in localStorage and add them to the settings object
    if (typeof localStorage !== 'undefined') {
        for (let i = 0; i < localStorage.length; i++) {
            const key = localStorage.key(i);
            if (key) {
                if (key !== "accountName" && key !== "accountPassword" && key !== "accountEmail") {
                    settings[key] = localStorage.getItem(key) || "";
                }
            }
        }
    }

    // Convert settings object to JSON string
    return JSON.stringify(settings, null, 2);
}

// Method to import settings from a JSON object, clearing old localStorage
export function importSettings(jsonData: string): void {
    try {
        const parsedSettings = JSON.parse(jsonData);

        // Loop through parsed settings and save them in localStorage
        if (typeof localStorage !== 'undefined') {
            Object.keys(parsedSettings).forEach((key) => {
                localStorage.setItem(key, parsedSettings[key]);
            });
        }

        console.log("Settings imported successfully!");
    } catch (error) {
        console.error("Invalid JSON data:", error);
    }
}

export const sendToDatabase = async () => {
    const useName = localStorage.getItem("accountName")
    const usePassword = localStorage.getItem("accountPassword")
    if (useName && usePassword) {
        const result = await changeSettings(useName, usePassword, JSON.parse(exportSettings()))
        if (result == true) {
            alert('Data has been transferred')
            window.location.reload();
        }
    }
    window.location.reload();
};

export const importDatabase = async (useName: string, usePassword: string) => {
    const databaseSettings = await getSettings(useName, usePassword);

    // Ensure user settings exist before flattening and storing
    if (typeof databaseSettings == 'object' && databaseSettings) {
        importSettings(JSON.stringify(databaseSettings, null, 2)); // Pass only the current user's settings
    } else {
        console.error('Database settings are not in the expected format.');
    }
}