import { useState } from 'react';
import { Head, Link, useForm } from '@inertiajs/react';
import { router } from '@inertiajs/react';
import { ConfirmDialog } from '@/components/admin/confirm-dialog';
import { ImageUpload } from '@/components/admin/image-upload';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';

interface Partner {
    id: number;
    name: string;
    url: string | null;
    tier: string | null;
    logo: string | null;
    sort_order: number;
}

export default function PartnerEdit({ partner }: { partner: Partner }) {
    const [imageKey, setImageKey] = useState(0);
    const [confirmDelete, setConfirmDelete] = useState(false);

    const { data, setData, post, processing, errors } = useForm({
        _method: 'PUT',
        name: partner.name,
        url: partner.url ?? '',
        tier: partner.tier ?? '',
        sort_order: String(partner.sort_order),
        logo: null as File | null,
        logo_clear: false,
    });

    function submit(e: React.FormEvent) {
        e.preventDefault();
        post(`/admin/partners/${partner.id}`);
    }

    return (
        <>
            <Head title="Edit Partner" />
            <form onSubmit={submit} className="space-y-0">
                <div className="sticky top-16 z-10 -mx-6 mb-6 flex items-center justify-between border-b bg-background px-6 pb-4 pt-2 lg:-mx-8 lg:px-8">
                    <div>
                        <div className="flex items-center gap-2 text-sm text-muted-foreground">
                            <Link href="/admin/partners">Partners</Link>
                            <span>/</span>
                            <span className="text-foreground">Edit Partner</span>
                        </div>
                        <h1 className="text-2xl font-bold">Edit Partner</h1>
                    </div>
                    <div className="flex items-center gap-3">
                        <Button type="button" variant="outline" asChild>
                            <Link href="/admin/partners">Cancel</Link>
                        </Button>
                        <Button type="button" variant="destructive" onClick={() => setConfirmDelete(true)}>Delete</Button>
                        <Button type="submit" disabled={processing}>{processing ? 'Saving...' : 'Save Changes'}</Button>
                    </div>
                </div>

                <div className="grid grid-cols-1 gap-6 lg:grid-cols-[1fr_320px]">
                    <div className="space-y-6">
                        <div className="rounded-xl border border-border bg-card p-6 space-y-4">
                            <div className="space-y-1.5">
                                <Label htmlFor="name">Name *</Label>
                                <Input id="name" value={data.name} onChange={(e) => setData('name', e.target.value)} required />
                                {errors.name && <p className="text-xs text-destructive">{errors.name}</p>}
                            </div>
                            <div className="space-y-1.5">
                                <Label htmlFor="url">Website URL</Label>
                                <Input id="url" type="url" value={data.url} onChange={(e) => setData('url', e.target.value)} />
                                {errors.url && <p className="text-xs text-destructive">{errors.url}</p>}
                            </div>
                            <div className="space-y-1.5">
                                <Label htmlFor="tier">Tier</Label>
                                <Input id="tier" value={data.tier} onChange={(e) => setData('tier', e.target.value)} />
                                {errors.tier && <p className="text-xs text-destructive">{errors.tier}</p>}
                            </div>
                        </div>
                    </div>

                    <div className="space-y-6">
                        <div className="rounded-xl border border-border bg-card p-6 space-y-4">
                            <div className="space-y-1.5">
                                <Label>Logo</Label>
                                <ImageUpload
                                    key={imageKey}
                                    currentUrl={partner.logo}
                                    onChange={(file) => { setData('logo', file); setData('logo_clear', false); }}
                                    onClear={() => { setData('logo', null); setData('logo_clear', true); setImageKey((k) => k + 1); }}
                                />
                            </div>
                            <div className="space-y-1.5">
                                <Label htmlFor="sort_order">Sort Order</Label>
                                <Input id="sort_order" type="number" value={data.sort_order} onChange={(e) => setData('sort_order', e.target.value)} />
                            </div>
                        </div>
                    </div>
                </div>
            </form>

            <ConfirmDialog
                open={confirmDelete}
                onOpenChange={setConfirmDelete}
                title="Delete Partner?"
                description="This is permanent and cannot be undone."
                confirmLabel="Delete"
                variant="danger"
                onConfirm={() => router.delete(`/admin/partners/${partner.id}`, { onSuccess: () => setConfirmDelete(false) })}
            />
        </>
    );
}
