import { describe, it, expect } from 'vitest'
import { getInvoiceTypeColor } from './utils'

const DEFAULT_COLOR = 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200'

describe('getInvoiceTypeColor', () => {

    describe('cuando no recibe tipo', () => {
        it.each([
            [undefined, 'undefined'],
            [null,      'null'],
            ['',        'string vacío'],
        ] as const)('devuelve color gris por defecto para %s', (input) => {
            expect(getInvoiceTypeColor(input)).toBe(DEFAULT_COLOR)
        })
    })

    describe('tipos de factura conocidos', () => {
        it.each([
            // input            color esperado       tipo
            ['tem',             'bg-red-100',        'TEM exacto'],
            ['impo tem',        'bg-red-100',        'TEM con prefijo'],
            ['def',             'bg-green-100',      'DEF exacto'],
            ['impo def',        'bg-green-100',      'DEF con prefijo'],
            ['mex',             'bg-purple-100',     'MEX exacto'],
            ['comp mex',        'bg-purple-100',     'MEX con prefijo'],
            ['cr',              'bg-blue-100',       'CAM REG exacto'],
            ['cam. reg.',       'bg-blue-100',       'CAM REG con puntos'],
            ['cam reg',         'bg-blue-100',       'CAM REG sin puntos'],
            ['expo',            'bg-blue-100',       'EXPO'],
            ['exdef',           'bg-blue-100',       'EXDEF'],
            ['pterm',           'bg-blue-100',       'PTERM'],
            ['repar',           'bg-sky-100',        'REPAR exacto'],
            ['imp. rep.',       'bg-sky-100',        'IMP REP con puntos'],
            ['imp rep',         'bg-sky-100',        'IMP REP sin puntos'],
        ] as const)('retorna el color correcto para %s — %s', (input, expectedColor) => {
            expect(getInvoiceTypeColor(input)).toContain(expectedColor)
        })
    })

    describe('tipo desconocido', () => {
        it('devuelve color gris para tipo no reconocido', () => {
            expect(getInvoiceTypeColor('TIPO_INEXISTENTE')).toBe(DEFAULT_COLOR)
        })
    })
})