import { describe, expect, it } from 'vitest';
import type { PeriodeListe } from '../types';
import { paramsExport, type VueExport } from './export-params';

const avril: PeriodeListe = { mode: 'mois', du: '2026-04-01', au: '2026-04-30', annee: 2026, mois: 4 };
const annee: PeriodeListe = { mode: 'annee', du: '2026-01-01', au: '2026-12-31', annee: 2026, mois: null };
const libre: PeriodeListe = { mode: 'personnalise', du: '2025-12-15', au: '2026-01-15', annee: 2025, mois: null };

const vue = (periode: PeriodeListe, filtres: Partial<VueExport> = {}): VueExport => ({
    periode,
    statut: 'toutes',
    type: 'tout',
    recherche: '',
    ...filtres,
});

describe("paramètres de l'export des factures", () => {
    it('reprend la période affichée, dans le format que lit le serveur', () => {
        expect(paramsExport('pdf', vue(avril))).toEqual({ format: 'pdf', mois: '2026-04' });
        expect(paramsExport('xlsx', vue(annee))).toEqual({ format: 'xlsx', annee: 2026 });
        expect(paramsExport('xlsx', vue(libre))).toEqual({ format: 'xlsx', du: '2025-12-15', au: '2026-01-15' });
    });

    it("ajoute l'onglet, le type et la recherche quand ils filtrent", () => {
        expect(paramsExport('xlsx', vue(avril, { statut: 'non_payee', type: 'facture', recherche: '  Étoile ' }))).toEqual({
            format: 'xlsx',
            mois: '2026-04',
            statut: 'non_payee',
            type: 'facture',
            q: 'Étoile',
        });
    });

    it("n'écrit pas les valeurs par défaut", () => {
        const params = paramsExport('pdf', vue(avril, { recherche: '   ' }));
        expect(params).not.toHaveProperty('statut');
        expect(params).not.toHaveProperty('type');
        expect(params).not.toHaveProperty('q');
    });
});
