import options from 'options';
import Gio from 'gi://Gio';
import { bash, Notify } from 'lib/utils';
import icons from 'lib/icons';
import { filterConfigForThemeOnly, loadJsonFile, saveConfigToFile } from 'widget/settings/shared/FileChooser';

const { restartCommand } = options.hyprpanel;
export const hexColorPattern = /^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;

globalThis.useTheme = (filePath: string): void => {
    const importedConfig = loadJsonFile(filePath);

    if (!importedConfig) {
        return;
    }

    Notify({
        summary: `Importing Theme`,
        body: `Importing: ${filePath}`,
        iconName: icons.ui.info,
        timeout: 7000,
    });

    const tmpConfigFile = Gio.File.new_for_path(`${TMP}/config.json`);
    const optionsConfigFile = Gio.File.new_for_path(OPTIONS);

    const [tmpSuccess, tmpContent] = tmpConfigFile.load_contents(null);
    const [optionsSuccess, optionsContent] = optionsConfigFile.load_contents(null);

    if (!tmpSuccess || !optionsSuccess) {
        console.error('Failed to read existing configuration files.');
        return;
    }

    let tmpConfig = JSON.parse(new TextDecoder('utf-8').decode(tmpContent));
    let optionsConfig = JSON.parse(new TextDecoder('utf-8').decode(optionsContent));

    const filteredConfig = filterConfigForThemeOnly(importedConfig);
    tmpConfig = { ...tmpConfig, ...filteredConfig };
    optionsConfig = { ...optionsConfig, ...filteredConfig };

    saveConfigToFile(tmpConfig, `${TMP}/config.json`);
    saveConfigToFile(optionsConfig, OPTIONS);
    bash(restartCommand.value);
};
