import { Head, Link, useForm } from '@inertiajs/react';

import PageHeader from '@/Components/layout/PageHeader';
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/Components/ui/breadcrumb';
import { Button } from '@/Components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/Components/ui/card';
import { Input } from '@/Components/ui/input';
import { Label } from '@/Components/ui/label';
import { Switch } from '@/Components/ui/switch';
import { Textarea } from '@/Components/ui/textarea';
import { useUnsavedChanges } from '@/hooks/useUnsavedChanges';
import AdminLayout from '@/Layouts/AdminLayout';

interface Testimonial {
  id: number;
  name: string;
  role: string | null;
  company: string | null;
  quote: string;
  avatar_url: string | null;
  rating: number;
  source: string | null;
  featured: boolean;
}

interface Props {
  testimonial: Testimonial;
}

export default function AdminTestimonialsEdit({ testimonial }: Props) {
  const { data, setData, patch, processing, errors, isDirty } = useForm({
    name: testimonial.name,
    role: testimonial.role ?? '',
    company: testimonial.company ?? '',
    quote: testimonial.quote,
    avatar_url: testimonial.avatar_url ?? '',
    rating: testimonial.rating,
    source: testimonial.source ?? '',
    featured: testimonial.featured,
  });

  useUnsavedChanges(isDirty);

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    patch(route('admin.testimonials.update', testimonial.id));
  };

  return (
    <AdminLayout>
      <Head title={`Edit Testimonial — ${testimonial.name}`} />
      <div className="container pt-6">
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href="/admin">Admin</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href={route('admin.testimonials.index')}>Testimonials</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>Edit</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>
      </div>

      <PageHeader title="Edit Testimonial" subtitle={`Editing testimonial from ${testimonial.name}`} />

      <div className="container py-8">
        <form onSubmit={handleSubmit} className="space-y-6 max-w-2xl">
          <Card>
            <CardHeader>
              <CardTitle>Testimonial Details</CardTitle>
            </CardHeader>
            <CardContent className="space-y-4">
              <div className="space-y-1">
                <Label htmlFor="name">Name *</Label>
                <Input
                  id="name"
                  value={data.name}
                  onChange={(e) => setData('name', e.target.value)}
                  placeholder="Customer name"
                />
                {errors.name && <p className="text-sm text-destructive">{errors.name}</p>}
              </div>

              <div className="grid grid-cols-2 gap-4">
                <div className="space-y-1">
                  <Label htmlFor="role">Role</Label>
                  <Input
                    id="role"
                    value={data.role}
                    onChange={(e) => setData('role', e.target.value)}
                    placeholder="e.g. SEO Specialist"
                  />
                  {errors.role && <p className="text-sm text-destructive">{errors.role}</p>}
                </div>

                <div className="space-y-1">
                  <Label htmlFor="company">Company</Label>
                  <Input
                    id="company"
                    value={data.company}
                    onChange={(e) => setData('company', e.target.value)}
                    placeholder="Company name"
                  />
                  {errors.company && <p className="text-sm text-destructive">{errors.company}</p>}
                </div>
              </div>

              <div className="space-y-1">
                <Label htmlFor="quote">Quote *</Label>
                <Textarea
                  id="quote"
                  value={data.quote}
                  onChange={(e) => setData('quote', e.target.value)}
                  placeholder="Customer testimonial text"
                  rows={4}
                />
                {errors.quote && <p className="text-sm text-destructive">{errors.quote}</p>}
              </div>

              <div className="space-y-1">
                <Label htmlFor="avatar_url">Avatar URL</Label>
                <Input
                  id="avatar_url"
                  type="url"
                  value={data.avatar_url}
                  onChange={(e) => setData('avatar_url', e.target.value)}
                  placeholder="https://..."
                />
                {errors.avatar_url && <p className="text-sm text-destructive">{errors.avatar_url}</p>}
              </div>

              <div className="grid grid-cols-2 gap-4">
                <div className="space-y-1">
                  <Label htmlFor="rating">Rating (1–5) *</Label>
                  <Input
                    id="rating"
                    type="number"
                    min={1}
                    max={5}
                    value={data.rating}
                    onChange={(e) => setData('rating', parseInt(e.target.value, 10) || 5)}
                  />
                  {errors.rating && <p className="text-sm text-destructive">{errors.rating}</p>}
                </div>

                <div className="space-y-1">
                  <Label htmlFor="source">Source</Label>
                  <Input
                    id="source"
                    value={data.source}
                    onChange={(e) => setData('source', e.target.value)}
                    placeholder="e.g. email, twitter, product_hunt"
                  />
                  {errors.source && <p className="text-sm text-destructive">{errors.source}</p>}
                </div>
              </div>

              <div className="flex items-center gap-3">
                <Switch
                  id="featured"
                  checked={data.featured}
                  onCheckedChange={(checked) => setData('featured', checked)}
                />
                <Label htmlFor="featured">Featured on marketing site</Label>
              </div>
            </CardContent>
          </Card>

          <div className="flex gap-3">
            <Button type="submit" disabled={processing}>
              {processing ? 'Saving…' : 'Save Changes'}
            </Button>
            <Button variant="outline" asChild>
              <Link href={route('admin.testimonials.index')}>Cancel</Link>
            </Button>
          </div>
        </form>
      </div>
    </AdminLayout>
  );
}
