'use client' import { useTranslations } from 'next-intl' import { useState, useEffect, useCallback } from 'react' import { createClient } from '@/lib/supabase/client' import { useCompany } from '@/contexts/CompanyContext' import { Label } from '@/components/ui/label' import { Skeleton } from "@/components/ui/skeleton" import { Badge } from '@/components/ui/badge' interface VoucherSeries { voucher_series: string last_number: number fiscal_period_id: string } interface VoucherSeriesManagerProps { defaultSeries?: string } export function VoucherSeriesManager({ defaultSeries }: VoucherSeriesManagerProps) { const t = useTranslations('settings_voucher_series') const { company } = useCompany() const [series, setSeries] = useState([]) const [isLoading, setIsLoading] = useState(true) const fetchSeries = useCallback(async () => { if (!company?.id) return const supabase = createClient() const { data } = await supabase .from('voucher_sequences') .select('voucher_series, last_number, fiscal_period_id') .eq('company_id', company.id) .order('voucher_series') setSeries(data || []) setIsLoading(false) }, [company?.id]) useEffect(() => { fetchSeries() }, [fetchSeries]) // Group by series letter, show the highest last_number const grouped = series.reduce>((acc, s) => { const existing = acc[s.voucher_series] || 0 acc[s.voucher_series] = Math.max(existing, s.last_number) return acc }, {}) const seriesEntries = Object.entries(grouped).sort(([a], [b]) => a.localeCompare(b)) return (

{t('heading')}

{isLoading ? (
) : seriesEntries.length === 0 ? (

{t('empty_state', { series: defaultSeries || 'A' })}

) : (
{seriesEntries.map(([letter, lastNum]) => (
{t('series_prefix')} {letter} {letter === (defaultSeries || 'A') && ( {t('default_badge')} )}
{t('latest_number')}: {lastNum}
))}
)}

{t('footnote')}

) }