// good for diagnostic purposes

import { RequestCluster } from '../../request-cluster';
import { DataLocation } from '../../stolen-data-entry';

export type FakeRequestClusterData = {
    id: string;
    hasCookies: boolean;
    hasMarkedCookies: boolean;
    hasMarks: boolean;
    exposesOriginWhere: DataLocation[];
    exposesOrigin: boolean;
};

export function getFakeClusterData(
    clusters: Record<string, RequestCluster>
): Record<string, FakeRequestClusterData> {
    return Object.fromEntries(
        Object.entries(clusters).map(([key, cluster]) => [key, cluster.makeDataForFake()])
    );
}

export function makeFakeClusters(
    fake_clusters_data: Record<string, FakeRequestClusterData>
): Record<string, FakeCluster> {
    return Object.fromEntries(
        Object.entries(fake_clusters_data).map(([key, cluster_data]) => [
            key,
            new FakeCluster(cluster_data),
        ])
    );
}

export class FakeCluster extends RequestCluster {
    constructor(public data: FakeRequestClusterData) {
        super(data.id);

        for (const key of [
            'hasCookies',
            'hasMarkedCookies',
            'hasMarks',
            'exposesOriginWhere',
            'exposesOrigin',
        ]) {
            //@ts-ignore
            this[key] = () => {
                //@ts-ignore
                return this.data[key];
            };
        }
    }

    hasCookies() {
        return this.data.hasCookies;
    }
}
