import { Head } from '@inertiajs/react';
import { useState } from 'react';
import Heading from '@/components/heading';
import { useCan } from '@/hooks/use-can';
import { dashboard } from '@/routes';
import { index } from '@/routes/admin/chart-of-accounts';
import { ChartOfAccountFormModal } from './chart-of-account-form-modal';
import type { ChartOfAccountFormValues } from './chart-of-account-form-modal';
import { ChartOfAccountTree } from './chart-of-account-tree';
import type { ChartOfAccountRow } from './chart-of-account-tree';

export default function ChartOfAccountsIndex({
    accounts,
}: {
    accounts: ChartOfAccountRow[];
}) {
    const canCreate = useCan('chart-of-accounts.create');
    const canUpdate = useCan('chart-of-accounts.update');
    const canDelete = useCan('chart-of-accounts.delete');

    const [modalOpen, setModalOpen] = useState(false);
    const [parent, setParent] = useState<{
        id: number;
        code: string;
        label: string;
    } | null>(null);
    const [editingAccount, setEditingAccount] =
        useState<ChartOfAccountFormValues | null>(null);

    function openCreateModal(account: ChartOfAccountRow) {
        setEditingAccount(null);
        setParent({ id: account.id, code: account.code, label: account.label });
        setModalOpen(true);
    }

    function openEditModal(account: ChartOfAccountRow) {
        setParent(null);
        setEditingAccount({
            id: account.id,
            code: account.code,
            label: account.label,
            is_active: account.is_active,
        });
        setModalOpen(true);
    }

    return (
        <>
            <Head title="Plan comptable" />

            <div className="flex h-full flex-1 flex-col gap-6 p-4 md:p-6">
                <Heading
                    title="Plan comptable"
                    description="Nomenclature OHADA/SYSCOHADA — les comptes système sont fixes, seuls des sous-comptes peuvent être ajoutés."
                />

                <ChartOfAccountTree
                    accounts={accounts}
                    onCreateChild={openCreateModal}
                    onEdit={openEditModal}
                    canCreate={canCreate}
                    canUpdate={canUpdate}
                    canDelete={canDelete}
                />
            </div>

            <ChartOfAccountFormModal
                open={modalOpen}
                onOpenChange={setModalOpen}
                parent={parent}
                account={editingAccount}
            />
        </>
    );
}

ChartOfAccountsIndex.layout = {
    breadcrumbs: [
        { title: 'Tableau de bord', href: dashboard() },
        { title: 'Plan comptable', href: index() },
    ],
};
