/**
 * Copyright 2013-2026 the original author or authors from the JHipster project.
 *
 * This file is part of the JHipster project, see https://www.jhipster.tech/
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { mutateData } from "../utils/object.js";
export const prepareMutationTest = (data) => {
    return Object.entries(data).reduce((acc, [name, value]) => {
        const cleanupName = name.replace(/(Loading|Preparing)$/, '');
        acc[cleanupName] ??= [];
        acc[cleanupName].push(value);
        return acc;
    }, {});
};
export const mutateMockedData = (...mutations) => {
    const data = {};
    const proxy = new Proxy(data, {
        get: (target, p) => {
            return typeof p !== 'symbol' && target[p] === undefined ? p : target[p];
        },
        set: (target, p, value) => {
            target[p] = value;
            return true;
        },
    });
    mutateData(proxy, ...mutations);
    return data;
};
export const mutateMockedCompleteData = (...mutations) => {
    const data = {};
    const proxyGeneratedProperties = {};
    if (mutations.length > 1) {
        // Treat the first mutation as the one that should bootstrap the data with arrays and objects.
        mutateData(proxyGeneratedProperties, mutations[0]);
    }
    const proxy = new Proxy(data, {
        get: (target, p) => {
            if (typeof p === 'symbol') {
                return target[p];
            }
            return target[p] === undefined ? (proxyGeneratedProperties[p] ?? p) : target[p];
        },
        set: (target, p, value) => {
            if (typeof p === 'symbol' || proxyGeneratedProperties[p] !== value) {
                target[p] = value;
            }
            return true;
        },
        has: (target, p) => {
            if (typeof p === 'symbol') {
                return target[p];
            }
            return true;
        },
    });
    mutateData(proxy, ...mutations);
    return data;
};
