import { FormEvent } from 'react';
import { Head, Link, router, useForm } from '@inertiajs/react';
import { ArrowLeft, CheckCircle2, Clock3, Package, Truck } from 'lucide-react';
import AppLayout from '@/layouts/app-layout';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { CrmSelect } from '@/components/crm-select';
import { StatusBadge } from '@/components/crm-data-table';

type Props = { delivery: any; couriers: any[]; isCourier: boolean };
const money = (v: any) => new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', maximumFractionDigits: 0 }).format(Number(v || 0));
const nextActions: Record<string, string[]> = { assigned: ['picked_up', 'failed'], picked_up: ['in_transit', 'failed'], in_transit: ['delivered', 'failed'] };
const labels: Record<string, string> = { picked_up: 'Barang Diambil', in_transit: 'Mulai Dalam Pengiriman', delivered: 'Tandai Terkirim', failed: 'Tandai Gagal' };

export default function Show({ delivery, couriers, isCourier }: Props) {
    const assignForm = useForm({ courier_id: delivery.courier_id ? String(delivery.courier_id) : '' });
    const statusForm = useForm<any>({ status: '', proof_photo: null, proof_signature: null, proof_note: '', failure_reason: '' });
    const assign = (e: FormEvent) => { e.preventDefault(); assignForm.put(`/crm/deliveries/${delivery.id}/assign`, { preserveScroll: true }); };
    const changeStatus = (status: string) => { router.post(`/crm/deliveries/${delivery.id}/status`, { status }, { preserveScroll: true }); };
    const submitStatus = (e: FormEvent, status: string) => { e.preventDefault(); router.post(`/crm/deliveries/${delivery.id}/status`, { ...statusForm.data, status }, { preserveScroll: true, forceFormData: true }); };
    const actions = nextActions[delivery.status] ?? [];
    return <AppLayout breadcrumbs={[{ title: 'Pengiriman', href: '/crm/deliveries' }, { title: delivery.delivery_number, href: `/crm/deliveries/${delivery.id}` }]}>
        <Head title={delivery.delivery_number} /><div className="crm-page space-y-6"><div className="flex items-center gap-3"><Button variant="ghost" size="icon" asChild><Link href="/crm/deliveries"><ArrowLeft /></Link></Button><div><div className="flex items-center gap-2"><h1 className="text-2xl font-semibold tracking-tight">{delivery.delivery_number}</h1><StatusBadge status={delivery.status} /></div><p className="text-sm text-muted-foreground">Order {delivery.order?.order_number ?? '-'}</p></div></div>
            <div className="grid gap-5 lg:grid-cols-[1.3fr_.7fr]"><div className="space-y-5"><Card><CardHeader><CardTitle className="flex items-center gap-2"><Package className="size-5" /> Detail Order</CardTitle></CardHeader><CardContent className="grid gap-4 sm:grid-cols-2"><div><p className="text-xs text-muted-foreground">Customer</p><p className="font-medium">{delivery.order?.customer?.name ?? '-'}</p></div><div><p className="text-xs text-muted-foreground">Total Order</p><p className="font-medium">{money(delivery.order?.grand_total)}</p></div><div className="sm:col-span-2"><p className="text-xs text-muted-foreground">Alamat Pengiriman</p><p>{delivery.delivery_address || delivery.order?.customer?.address || '-'}</p></div><div><p className="text-xs text-muted-foreground">Penerima</p><p>{delivery.recipient_name || '-'}</p></div><div><p className="text-xs text-muted-foreground">Telepon</p><p>{delivery.recipient_phone || '-'}</p></div></CardContent></Card>
                <Card><CardHeader><CardTitle className="flex items-center gap-2"><Clock3 className="size-5" /> Timeline</CardTitle></CardHeader><CardContent className="space-y-3 text-sm"><Timeline label="Ditugaskan" value={delivery.assigned_at} /><Timeline label="Barang diambil" value={delivery.picked_up_at} /><Timeline label="Dalam pengiriman" value={delivery.in_transit_at} /><Timeline label="Terkirim" value={delivery.delivered_at} /><Timeline label="Gagal" value={delivery.failed_at} /></CardContent></Card>
                {delivery.proof_photo || delivery.proof_signature ? <Card><CardHeader><CardTitle>Bukti Pengiriman</CardTitle></CardHeader><CardContent className="grid gap-4 md:grid-cols-2">{delivery.proof_photo && <img src={`/storage/${delivery.proof_photo}`} className="max-h-80 min-h-48 w-full rounded-xl border border-border bg-muted/30 object-contain p-2" alt="Bukti pengiriman" />}{delivery.proof_signature && <img src={`/storage/${delivery.proof_signature}`} className="max-h-80 min-h-48 w-full rounded-xl border border-border bg-muted/30 object-contain p-2" alt="Tanda tangan penerima" />}</CardContent></Card> : null}</div>
                <div className="space-y-5">{!isCourier && <Card><CardHeader><CardTitle>Assign Kurir</CardTitle></CardHeader><CardContent><form onSubmit={assign} className="space-y-3"><CrmSelect className="w-full" value={assignForm.data.courier_id} onChange={e => assignForm.setData('courier_id', e.target.value)}><option value="">Pilih kurir</option>{couriers.map(c => <option key={c.id} value={c.id}>{c.name}</option>)}</CrmSelect><Button className="w-full" disabled={assignForm.processing || delivery.status === 'delivered'}>Simpan Kurir</Button></form></CardContent></Card>}
                    {actions.length > 0 && <Card><CardHeader><CardTitle className="flex items-center gap-2"><Truck className="size-5" /> Update Status</CardTitle></CardHeader><CardContent className="space-y-4"><div className="grid gap-2">{actions.filter(a => a !== 'delivered' && a !== 'failed').map(a => <Button key={a} onClick={() => changeStatus(a)} disabled={statusForm.processing}>{labels[a]}</Button>)}</div>{actions.includes('delivered') && <form onSubmit={e => submitStatus(e, 'delivered')} className="space-y-3 border-t pt-4"><div><Label>Foto Bukti</Label><Input className="mt-2" type="file" accept="image/*" onChange={e => statusForm.setData('proof_photo', e.target.files?.[0] ?? null)} /></div><div><Label>Tanda Tangan</Label><Input className="mt-2" type="file" accept="image/*" onChange={e => statusForm.setData('proof_signature', e.target.files?.[0] ?? null)} /></div><div><Label>Catatan Penerima</Label><Textarea className="mt-2" value={statusForm.data.proof_note} onChange={e => statusForm.setData('proof_note', e.target.value)} /></div><Button className="w-full" type="submit" disabled={statusForm.processing}><CheckCircle2 className="mr-2 size-4" /> Tandai Terkirim</Button></form>}{actions.includes('failed') && <form onSubmit={e => submitStatus(e, 'failed')} className="space-y-3 border-t pt-4"><div><Label>Alasan Gagal</Label><Textarea className="mt-2" required value={statusForm.data.failure_reason} onChange={e => statusForm.setData('failure_reason', e.target.value)} placeholder="Contoh: customer tutup / alamat tidak ditemukan" /></div><Button variant="destructive" className="w-full" type="submit" disabled={statusForm.processing}>Tandai Gagal</Button></form>}</CardContent></Card>}
                    {delivery.status === 'delivered' && <Card><CardContent className="flex items-center gap-3 p-5"><CheckCircle2 className="size-8 text-primary" /><div><p className="font-semibold">Pengiriman selesai</p><p className="text-sm text-muted-foreground">Bukti pengiriman tersimpan pada surat jalan ini.</p></div></CardContent></Card>}</div></div></div></AppLayout>;
}
function Timeline({ label, value }: { label: string; value?: string | null }) { return <div className="flex items-center justify-between rounded-lg border px-3 py-2"><span>{label}</span><span className="text-xs text-muted-foreground">{value ? new Date(value).toLocaleString('id-ID') : '—'}</span></div>; }
