import AdminLayout from '@/Layouts/AdminLayout';
import { Head, useForm, Link } from '@inertiajs/react';
import { ArrowLeft, Save, Plus, X, Image as ImageIcon } from 'lucide-react';
import { FormEvent, useState } from 'react';
import MediaPicker from '@/Components/MediaPicker';

interface CaseStudy {
    id: number;
    title: string;
    tag: string | null;
    location: string | null;
    excerpt: string | null;
    content: string | null;
    metrics: Array<{ k: string, v: string }> | null;
    is_active: boolean;
    media_id: number | null;
    media?: { id: number, url: string };
}

export default function Form({ caseStudy }: { caseStudy?: CaseStudy }) {
    const isEditing = !!caseStudy;

    const [pickerOpen, setPickerOpen] = useState(false);

    const { data, setData, post, processing, errors } = useForm({
        _method: isEditing ? 'PUT' : 'POST',
        title: caseStudy?.title || '',
        tag: caseStudy?.tag || '',
        location: caseStudy?.location || '',
        excerpt: caseStudy?.excerpt || '',
        content: caseStudy?.content || '',
        metrics: caseStudy?.metrics || [{ k: '', v: '' }],
        is_active: caseStudy?.is_active ?? true,
        media_id: caseStudy?.media_id || null,
    });

    const [selectedMedia, setSelectedMedia] = useState(caseStudy?.media || null);

    const addMetric = () => {
        setData('metrics', [...data.metrics, { k: '', v: '' }]);
    };

    const removeMetric = (index: number) => {
        const newMetrics = [...data.metrics];
        newMetrics.splice(index, 1);
        setData('metrics', newMetrics);
    };

    const updateMetric = (index: number, field: 'k' | 'v', value: string) => {
        const newMetrics = [...data.metrics];
        newMetrics[index][field] = value;
        setData('metrics', newMetrics);
    };

    const handleSubmit = (e: FormEvent) => {
        e.preventDefault();
        if (isEditing) {
            post(route('admin.case-studies.update', caseStudy.id));
        } else {
            post(route('admin.case-studies.store'));
        }
    };

    return (
        <AdminLayout>
            <Head title={isEditing ? 'Edit Case Study' : 'Add Case Study'} />

            <div className="mb-10 flex flex-col md:flex-row md:items-center justify-between gap-6">
                <div>
                    <Link
                        href={route('admin.case-studies.index')}
                        className="inline-flex items-center gap-2 text-xs font-semibold uppercase tracking-wider text-[#8C92AC] hover:text-ink mb-3 transition-colors"
                    >
                        <ArrowLeft className="h-3 w-3" />
                        Back to portfolio
                    </Link>
                    <div className="flex items-center gap-4 flex-wrap">
                        <h1 className="font-display text-[1.75rem] md:text-[2.5rem] font-normal tracking-[-0.02em] text-ink leading-tight">
                            {isEditing ? 'Edit Case Study' : 'New Case Study'}
                        </h1>
                        <button
                            type="button"
                            onClick={() => setData('is_active', !data.is_active)}
                            className={`h-7 px-3 rounded-full text-[10px] font-bold uppercase tracking-wider transition-all border flex items-center justify-center mt-1.5 ${
                                data.is_active 
                                    ? 'bg-emerald-50 border-emerald-100 text-emerald-700' 
                                    : 'bg-amber-50 border-amber-100 text-amber-700'
                            }`}
                        >
                            {data.is_active ? '● Published' : '○ Draft'}
                        </button>
                    </div>
                </div>
                <div className="flex items-center gap-3">
                    <button
                        onClick={handleSubmit}
                        disabled={processing}
                        className="w-full md:w-auto h-11 px-8 md:h-9 md:px-6 inline-flex items-center justify-center gap-2 rounded-xl md:rounded-lg bg-ink text-white text-[12px] font-bold hover:bg-primary transition-all disabled:opacity-50"
                    >
                        <Save className="h-4 w-4" />
                        {isEditing ? 'Update Case Study' : 'Publish Study'}
                    </button>
                </div>
            </div>

            <form onSubmit={handleSubmit} className="grid gap-8 lg:grid-cols-12">
                <div className="lg:col-span-8 space-y-6">
                    <div className="rounded-3xl border border-border bg-white p-8 shadow-sm space-y-6">
                        <div>
                            <label className="block text-sm font-semibold mb-2">Study Title</label>
                            <input
                                type="text"
                                value={data.title}
                                onChange={(e) => setData('title', e.target.value)}
                                className="w-full rounded-2xl border border-border bg-[#FAFAF8] px-5 py-3 outline-none focus:ring-2 focus:ring-primary/20 transition-all"
                                placeholder="e.g. From ₦300k wasted monthly to 3× inquiry volume"
                            />
                            {errors.title && <p className="text-red-500 text-xs mt-1">{errors.title}</p>}
                        </div>

                        <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
                            <div>
                                <label className="block text-[11px] font-bold uppercase tracking-wider text-[#8C92AC] mb-3">Tag / Service</label>
                                <input
                                    type="text"
                                    value={data.tag}
                                    onChange={(e) => setData('tag', e.target.value)}
                                    className="w-full rounded-xl border border-[#E8E6DF] bg-[#FAFAF8] px-5 py-3 text-[13px] outline-none focus:border-primary/50"
                                    placeholder="e.g. Brand strategy + Social"
                                />
                            </div>
                            <div>
                                <label className="block text-[11px] font-bold uppercase tracking-wider text-[#8C92AC] mb-3">Location</label>
                                <input
                                    type="text"
                                    value={data.location}
                                    onChange={(e) => setData('location', e.target.value)}
                                    className="w-full rounded-xl border border-[#E8E6DF] bg-[#FAFAF8] px-5 py-3 text-[13px] outline-none focus:border-primary/50"
                                    placeholder="e.g. Lagos, Nigeria"
                                />
                            </div>
                        </div>

                        <div>
                            <label className="block text-sm font-semibold mb-2">Short Excerpt (for grid)</label>
                            <textarea
                                value={data.excerpt || ''}
                                onChange={(e) => setData('excerpt', e.target.value)}
                                rows={3}
                                className="w-full rounded-2xl border border-border bg-[#FAFAF8] px-5 py-4 outline-none focus:ring-2 focus:ring-primary/20 transition-all"
                                placeholder="A brief summary for the main list..."
                            />
                            {errors.excerpt && <p className="text-red-500 text-xs mt-1">{errors.excerpt}</p>}
                        </div>

                        <div>
                            <label className="block text-sm font-semibold mb-2">Full Content</label>
                            <textarea
                                value={data.content || ''}
                                onChange={(e) => setData('content', e.target.value)}
                                rows={10}
                                className="w-full rounded-2xl border border-border bg-[#FAFAF8] px-5 py-4 outline-none focus:ring-2 focus:ring-primary/20 transition-all"
                                placeholder="The full story: Situation, Diagnosis, System, Results..."
                            />
                            {errors.content && <p className="text-red-500 text-xs mt-1">{errors.content}</p>}
                        </div>
                    </div>
                </div>

                <div className="lg:col-span-4 space-y-6">
                    {/* Metrics Repeater */}
                    <div className="rounded-3xl border border-border bg-white p-8 shadow-sm">
                        <div className="flex items-center justify-between mb-6">
                            <label className="text-xs font-semibold uppercase tracking-widest text-[#8C92AC]">Real Numbers</label>
                            <button
                                type="button"
                                onClick={addMetric}
                                className="inline-flex items-center gap-1 text-[11px] font-bold text-primary hover:underline"
                            >
                                <Plus className="h-3 w-3" /> Add Metric
                            </button>
                        </div>
                        <div className="space-y-6">
                            {data.metrics.map((metric, index) => (
                                <div key={index} className="relative pt-4 border-t border-[#F0EDE8] first:border-0 first:pt-0 group">
                                    <button
                                        type="button"
                                        onClick={() => removeMetric(index)}
                                        className="absolute -top-1 -right-2 p-1.5 text-[#C0BDBA] hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity"
                                    >
                                        <X className="h-3.5 w-3.5" />
                                    </button>
                                    <div className="grid grid-cols-12 gap-3">
                                        <div className="col-span-4">
                                            <label className="text-[9px] font-bold text-[#C0BDBA] uppercase block mb-1">Key</label>
                                            <input
                                                type="text"
                                                value={metric.k}
                                                onChange={(e) => updateMetric(index, 'k', e.target.value)}
                                                className="w-full rounded-xl border border-border bg-[#FAFAF8] px-3 py-2 text-[12px] outline-none focus:ring-1 focus:ring-primary/20"
                                                placeholder="58%"
                                            />
                                        </div>
                                        <div className="col-span-8">
                                            <label className="text-[9px] font-bold text-[#C0BDBA] uppercase block mb-1">Label</label>
                                            <input
                                                type="text"
                                                value={metric.v}
                                                onChange={(e) => updateMetric(index, 'v', e.target.value)}
                                                className="w-full rounded-xl border border-border bg-[#FAFAF8] px-3 py-2 text-[12px] outline-none focus:ring-1 focus:ring-primary/20"
                                                placeholder="Revenue growth"
                                            />
                                        </div>
                                    </div>
                                </div>
                            ))}
                            {data.metrics.length === 0 && (
                                <p className="text-xs text-muted-foreground text-center py-2 italic">No metrics added.</p>
                            )}
                        </div>
                    </div>

                    <div className="rounded-3xl border border-border bg-white p-8 shadow-sm space-y-6">
                        <div>
                            <label className="block text-sm font-semibold mb-2">Featured Image</label>
                            <div 
                                onClick={() => setPickerOpen(true)}
                                className="relative cursor-pointer group aspect-[4/3] rounded-2xl border-2 border-dashed border-border flex flex-col items-center justify-center p-4 transition-all hover:border-primary/50 hover:bg-primary/5"
                            >
                                {selectedMedia ? (
                                    <img src={selectedMedia.url} alt="Selected" className="w-full h-full object-cover rounded-xl shadow-sm" />
                                ) : (
                                    <div className="text-center">
                                        <ImageIcon className="h-8 w-8 text-muted-foreground mx-auto mb-2" />
                                        <p className="text-[11px] text-muted-foreground">Select from Library</p>
                                    </div>
                                )}
                            </div>
                        </div>

                        <div className="pt-4">
                            <button
                                type="submit"
                                disabled={processing}
                                className="w-full inline-flex h-14 items-center justify-center gap-3 rounded-[1.5rem] bg-ink text-white text-[15px] font-bold hover:bg-primary transition-all shadow-xl shadow-ink/10 disabled:opacity-50"
                            >
                                <Save className="h-5 w-5" />
                                {isEditing ? 'Update Case Study' : 'Publish Study'}
                            </button>
                        </div>
                    </div>
                </div>
            </form>

            <MediaPicker 
                open={pickerOpen}
                onClose={() => setPickerOpen(false)}
                onSelect={(media) => {
                    setSelectedMedia(media);
                    setData('media_id', media.id);
                }}
                title="Select Case Study Image"
            />
        </AdminLayout>
    );
}
