import { router } from '@inertiajs/react';

// Último filtro (busca/página) de cada seção pesquisável, por integração. Fica guardado enquanto o
// usuário navega dentro de integrações (e no detalhe do pedido aberto a partir dela); ao sair, é descartado.
type SectionFilters = Record<string, Record<string, any>>;
const FILTERS_KEY = 'integracoes.filtros';

export const readFilters = (integrationId: number): SectionFilters => {
    try {
        return JSON.parse(sessionStorage.getItem(FILTERS_KEY) ?? '{}')[integrationId] ?? {};
    } catch {
        return {};
    }
};

export const saveFilters = (integrationId: number, section: string, params: Record<string, any>) => {
    try {
        const all = JSON.parse(sessionStorage.getItem(FILTERS_KEY) ?? '{}');
        all[integrationId] = { ...all[integrationId], [section]: params };
        sessionStorage.setItem(FILTERS_KEY, JSON.stringify(all));
    } catch {
        // sessionStorage indisponível: só não guarda o filtro.
    }
};

// Link para o detalhe do pedido marcando que veio de uma integração, para o "Voltar" retornar a ela.
export const orderEditUrl = (orderId: number) => route('pedidos.edit', { id: orderId, origem: 'integracao' });

// Volta para a seção de pedidos da integração, com o último filtro usado nela.
export const integrationOrdersUrl = (integrationId: number) =>
    route('integracoes.show', { id: integrationId, secao: 'pedidos', ...readFilters(integrationId).pedidos });

if (typeof window !== 'undefined') {
    router.on('navigate', (event) => {
        const path = new URL(event.detail.page.url, window.location.origin).pathname;
        if (path.startsWith('/integracoes') || /^\/pedidos\/\d+\/edit/.test(path)) return;
        try {
            sessionStorage.removeItem(FILTERS_KEY);
        } catch {
            // ignora
        }
    });
}
