import { componentInterface } from '../factory';
import { optionsInterface, DEFAULT_API_ENDPOINT } from '../options';
import { getVersion } from './version';
import type { ThumbmarkError } from '../functions';

// ===================== Logging (Internal) =====================

/**
 * Logs thumbmark data to remote logging endpoint (only once per session)
 * You can disable this by setting options.logging to false.
 * @internal
 */
export async function logThumbmarkData(thisHash: string, thumbmarkData: componentInterface, options: optionsInterface, experimentalData: componentInterface = {}, errors: ThumbmarkError[] = []): Promise<void> {
    const apiEndpoint = DEFAULT_API_ENDPOINT;
    const url = `${apiEndpoint}/log`;
    const payload = {
        thumbmark: thisHash,
        components: thumbmarkData,
        experimental: experimentalData,
        version: getVersion(),
        options,
        path: window?.location?.pathname,
        ...(errors.length > 0 && { errors }),
    };

    sessionStorage.setItem("_tmjs_l", "1");
    try {
        await fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(payload)
        });
    } catch { /* do nothing */ }

}