import React, { useState } from 'react';
import { Head, router } from '@inertiajs/react';
import AdminLayout from '@/Layouts/AdminLayout';
import { toast } from '@/Components/UI/Toast';
import Modal from '@/Components/UI/Modal';
import AdminSettlementDirectoryPanel from './Components/AdminSettlementDirectoryPanel';
import AdminSettlementWorksheetPanel from './Components/AdminSettlementWorksheetPanel';
import AdminSettlementHeroCard from './Components/AdminSettlementHeroCard';
import AdminSettlementRecentFeedCard from './Components/AdminSettlementRecentFeedCard';
import SettlementSlipModal from './Components/SettlementSlipModal';

/**
 * SettlementsIndex
 * 
 * Apple HIG-grade dual-workspace for Admin Settlements & Accounts Payable.
 * - Desktop (md+): Split-screen ergonomics (Left Master Directory, Right Adaptive Worksheet / Overview)
 * - Mobile (<md): Continuous downward scroll through sections (Hero -> Directory -> Recent Feed),
 *   with modal popup bottom-sheet for supplier worksheet inspection & payout.
 */
export default function SettlementsIndex({
    suppliers = [],
    stats = {},
    recentSettlements = { data: [] },
    activeShift = null,
    initialSelectedSupplierId = null,
}) {
    const [selectedSupplierId, setSelectedSupplierId] = useState(initialSelectedSupplierId);
    const [isMobileModalOpen, setIsMobileModalOpen] = useState(Boolean(initialSelectedSupplierId));
    const [isSubmitting, setIsSubmitting] = useState(false);
    const [selectedSlip, setSelectedSlip] = useState(null);

    const selectedSupplier = suppliers.find((s) => s.id === selectedSupplierId) || null;

    const formatRp = (num) =>
        new Intl.NumberFormat('id-ID', {
            style: 'currency',
            currency: 'IDR',
            minimumFractionDigits: 0,
            maximumFractionDigits: 0,
        }).format(num || 0);

    const handleSelectSupplierDesktop = (id) => {
        setSelectedSupplierId(id);
    };

    const handleSelectSupplierMobile = (id) => {
        setSelectedSupplierId(id);
        setIsMobileModalOpen(true);
    };

    const handleCloseMobileModal = () => {
        setIsMobileModalOpen(false);
        setSelectedSupplierId(null);
    };

    const handlePayoutSubmit = (payload) => {
        if (!selectedSupplier || isSubmitting) return;

        setIsSubmitting(true);
        router.post(`/admin/settlements/${selectedSupplier.id}/payout`, payload, {
            preserveScroll: true,
            onSuccess: () => {
                toast.success(`Pencairan dana untuk ${selectedSupplier.name} berhasil dibukukan.`);
                setIsMobileModalOpen(false);
            },
            onError: (errs) => {
                const msg = Object.values(errs)[0] || 'Gagal memproses pencairan dana.';
                toast.error(msg);
            },
            onFinish: () => {
                setIsSubmitting(false);
            },
        });
    };

    return (
        <AdminLayout pageTitle="Pusat Pencairan & Utang Supplier" hideHeader={true} fullHeight={true}>
            <Head title="Pusat Pencairan & Utang Supplier — Admin" />

            <div className="flex-1 h-full font-sans max-w-[1750px] w-full mx-auto p-2 sm:p-3 md:p-4 min-h-0 overflow-hidden flex flex-col">
                {/* ── DESKTOP SPLIT VIEW (md: and up) ── */}
                <div className="hidden md:flex flex-row gap-3 md:gap-4 flex-1 h-full min-h-0 overflow-hidden">
                    {/* Master Directory: Fixed compact width on desktop */}
                    <div className="w-[320px] lg:w-[350px] shrink-0 h-full flex flex-col overflow-hidden">
                        <AdminSettlementDirectoryPanel
                            suppliers={suppliers}
                            selectedSupplierId={selectedSupplierId}
                            onSelectSupplier={handleSelectSupplierDesktop}
                            formatRp={formatRp}
                            stats={stats}
                            isMobile={false}
                        />
                    </div>

                    {/* Detail Worksheet Desk: Takes all remaining space */}
                    <div className="flex-1 h-full flex flex-col overflow-hidden min-w-0">
                        <AdminSettlementWorksheetPanel
                            supplier={selectedSupplier}
                            stats={stats}
                            recentSettlements={recentSettlements}
                            formatRp={formatRp}
                            onDeselectSupplier={() => setSelectedSupplierId(null)}
                            onSelectSupplier={handleSelectSupplierDesktop}
                            onSubmitPayout={handlePayoutSubmit}
                            isSubmitting={isSubmitting}
                            onOpenSlip={setSelectedSlip}
                        />
                    </div>
                </div>

                {/* ── MOBILE VERTICAL STREAM (< md) ── */}
                {/* Smooth natural single-scroll through each section */}
                <div className="md:hidden flex flex-col gap-3.5 pb-24 overflow-y-auto flex-1 min-h-0 custom-scrollbar pr-0.5">
                    {/* Section 1: Executive Progress Hero */}
                    <div className="w-full shrink-0">
                        <AdminSettlementHeroCard stats={stats} formatRp={formatRp} />
                    </div>

                    {/* Section 2: Directory Panel */}
                    <div className="w-full shrink-0">
                        <AdminSettlementDirectoryPanel
                            suppliers={suppliers}
                            selectedSupplierId={selectedSupplierId}
                            onSelectSupplier={handleSelectSupplierMobile}
                            formatRp={formatRp}
                            stats={stats}
                            isMobile={true}
                        />
                    </div>

                    {/* Section 3: Recent Settlements Archive */}
                    <div className="w-full shrink-0">
                        <AdminSettlementRecentFeedCard
                            recentSettlements={recentSettlements}
                            formatRp={formatRp}
                            onSelectSupplier={handleSelectSupplierMobile}
                            onOpenSlip={setSelectedSlip}
                        />
                    </div>
                </div>

                {/* ── MOBILE DETAIL WORKSHEET MODAL POPUP ── */}
                {selectedSupplier && (
                    <div className="md:hidden">
                        <Modal
                            isOpen={isMobileModalOpen}
                            onClose={handleCloseMobileModal}
                            title={`Pelunasan — ${selectedSupplier.name}`}
                            maxWidth="3xl"
                        >
                            <div className="p-3 sm:p-4">
                                <AdminSettlementWorksheetPanel
                                    supplier={selectedSupplier}
                                    stats={stats}
                                    recentSettlements={recentSettlements}
                                    formatRp={formatRp}
                                    onDeselectSupplier={handleCloseMobileModal}
                                    onSelectSupplier={handleSelectSupplierMobile}
                                    onSubmitPayout={handlePayoutSubmit}
                                    isSubmitting={isSubmitting}
                                    onOpenSlip={setSelectedSlip}
                                    isModal={true}
                                />
                            </div>
                        </Modal>
                    </div>
                )}

                {/* Official Receipt Slip Modal */}
                <SettlementSlipModal
                    settlement={selectedSlip}
                    onClose={() => setSelectedSlip(null)}
                />
            </div>
        </AdminLayout>
    );
}
