import { Report } from "@clarity-types/core";
import config from "@src/core/config";
import { data } from "@src/data/envelope";

let history: string[];

export function reset(): void {
    history = [];
}

export function report(e: Error): Error {
    // Do not report the same message twice for the same page
    if (history && !history.includes(e.message)) {
        const url = config.report;
        if (url && url.length > 0 && data) {
            let payload: Report = {v: data.version, p: data.projectId, u: data.userId, s: data.sessionId, n: data.pageNum};
            if (e.message) { payload.m = e.message; }
            if (e.stack) { payload.e = e.stack; }
            // Using POST request instead of a GET request (img-src) to not violate existing CSP rules
            // Since, Clarity already uses XHR to upload data, we stick with similar POST mechanism for reporting too
            let xhr = new XMLHttpRequest();
            xhr.open("POST", url, true);
            xhr.send(JSON.stringify(payload));
            history.push(e.message);
        }
    }
    return e;
}
