import { Head } from '@inertiajs/react';
import Heading from '@/components/heading';
import { dashboard } from '@/routes';
import { financial } from '@/routes/admin/dashboards';
import {
    DashboardExportButtons,
    DashboardFiltersBar,
    type DashboardFilters,
    type FilterOptions,
} from './dashboard-filters';
import { KpiCard, LineChart } from './dashboard-widgets';
import { ExpiringContractsModal, type ExpiringContract } from './expiring-contracts-modal';

type Overview = {
    period: { type: string; label: string; fiscal_year: number };
    kpis: {
        revenue: string;
        cash_collected: string;
        receivables: string;
        payables: string;
        expenses: string;
        net: string;
        treasury: string;
        pending_invoices: number;
    };
    trend: Array<{ key: string; label: string; revenue: string; expenses: string }>;
};

export default function DashboardsFinancial({
    overview,
    filters,
    filterOptions,
    can,
    expiringContracts,
}: {
    overview: Overview;
    filters: DashboardFilters;
    filterOptions: FilterOptions;
    can: { export: boolean };
    expiringContracts?: ExpiringContract[];
}) {
    const netTone = Number(overview.kpis.net) >= 0 ? 'positive' : 'negative';
    const treasuryTone = Number(overview.kpis.treasury) >= 0 ? 'positive' : 'negative';

    return (
        <>
            <Head title="Suivi Financier" />
            <div className="flex h-full flex-1 flex-col gap-6 p-4 md:p-6">
                <div className="flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between">
                    <Heading
                        title="Suivi Financier"
                        description="Courbes d'évolution du chiffre d'affaires et des charges"
                    />
                    <DashboardExportButtons view="financial" filters={filters} canExport={can.export} />
                </div>

                <DashboardFiltersBar active="financial" filters={filters} filterOptions={filterOptions} />

                <div className="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
                    <KpiCard label="CA période" value={overview.kpis.revenue} hint="Facturé (issue_date)" />
                    <KpiCard label="Charges période" value={overview.kpis.expenses} hint="Achats + NDF + salaires" />
                    <KpiCard
                        label="Flux de trésorerie"
                        value={overview.kpis.treasury}
                        tone={treasuryTone}
                        hint="Encaissements − FF − rembours. NDF"
                    />
                    <KpiCard
                        label="Pièces ouvertes"
                        value={overview.kpis.pending_invoices}
                        format="number"
                        tone="warning"
                        hint="À date (clients + fournisseurs)"
                    />
                    <KpiCard label="Encaissements période" value={overview.kpis.cash_collected} tone="positive" />
                    <KpiCard label="Créances clients" value={overview.kpis.receivables} tone="warning" hint="Stock à date" />
                    <KpiCard label="Dettes fournisseurs" value={overview.kpis.payables} tone="warning" hint="Stock à date" />
                    <KpiCard label="Résultat net" value={overview.kpis.net} tone={netTone} hint="CA − charges période" />
                </div>

                <section className="space-y-3">
                    <div>
                        <h2 className="text-base font-semibold">Évolution CA vs charges</h2>
                        <p className="text-sm text-muted-foreground">
                            Courbes comparatives sur {overview.period.label}
                        </p>
                    </div>
                    <LineChart
                        items={overview.trend}
                        exportTitle="Évolution CA vs charges"
                        series={[
                            { key: 'revenue', label: 'Chiffre d\'affaires', color: '#2563eb' },
                            { key: 'expenses', label: 'Charges', color: '#dc2626' },
                        ]}
                    />
                </section>
            </div>
            
            <ExpiringContractsModal contracts={expiringContracts} />
        </>
    );
}

DashboardsFinancial.layout = {
    breadcrumbs: [
        { title: 'Tableau de bord', href: dashboard() },
        { title: 'Suivi Financier', href: financial() },
    ],
};
