import { usePage } from '@inertiajs/vue3';
import { computed } from 'vue';

/**
 * Résultat du dernier test de connexion relayé par le serveur (flash
 * `connection_test`) : clé de la connexion testée, issue et latence.
 * La latence n’est pas persistée ; elle n’est connue que sur la réponse
 * qui suit le test.
 */
export type ConnectionTestFlash = {
    key: string;
    ok: boolean;
    duration_ms: number;
};

export const formatLatency = (ms: number): string =>
    ms >= 1000 ? `${(ms / 1000).toFixed(1).replace('.', ',')} s` : `${ms} ms`;

export function useConnectionTestFlash() {
    const page = usePage();

    const result = computed<ConnectionTestFlash | null>(() => {
        const flash = page.props.flash as
            { connection_test?: ConnectionTestFlash } | undefined;
        const test = flash?.connection_test;

        return test && typeof test.duration_ms === 'number' ? test : null;
    });

    /** Latence formatée du dernier test pour cette clé, sinon null. */
    const latencyFor = (key: string): string | null =>
        result.value?.key === key
            ? formatLatency(result.value.duration_ms)
            : null;

    return { result, latencyFor };
}
