import { useTranslation } from '@/hooks/use-translation';
import React, { useMemo, useState } from 'react';
import { Head, Link, router } from '@inertiajs/react';
import AppLayout from '@/layouts/app-layout';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Badge } from '@/components/ui/badge';
import { Plus, Search, FileText, Edit, Trash2, Users, Filter, CheckCircle, XCircle } from 'lucide-react';
import { BreadcrumbItem, Deed, Member } from '@/types';

interface PaginatedDeeds {
  data: Deed[];
  current_page: number;
  last_page: number;
  per_page: number;
  total: number;
}

interface DeedStats {
  total_count: number;
  total_occupied: number;
}

interface Props {
  deeds: PaginatedDeeds;
  members: Member[];
  stats: DeedStats;
  filters: {
    search?: string;
    member?: string;
  };
}

export default function DeedsIndex({ deeds, members, stats, filters }: Readonly<Props>) {
    const { t } = useTranslation();
  const [search, setSearch] = useState(filters.search || '');
  const [memberId, setMemberId] = useState(filters.member || '');

  // Helper function to get capacity from gravesite type
  const getGravesiteCapacity = (type: string): number => {
    switch (type) {
      case 'single':
      case 'cremation':
        return 1;
      case 'double':
        return 2;
      case 'family':
        return 4;
      default:
        return 1;
    }
  };

  const breadcrumbs: BreadcrumbItem[] = useMemo(() => [
    { title: 'Dashboard', href: '/dashboard' },
    { title: 'Cemetery', href: '/admin/deeds' },
    { title: 'Deeds', href: '/admin/deeds' },
  ], []);

  const handleFilter = () => {
    router.get('/admin/deeds', {
      search: search || undefined,
      member: memberId || undefined,
    }, { preserveState: true });
  };

  const handleClearFilters = () => {
    setSearch('');
    setMemberId('');
    router.get('/admin/deeds');
  };

  const handleDelete = (deed: Deed) => {
    if (confirm(`Are you sure you want to delete deed ${deed.deed_number}?`)) {
      router.delete(`/admin/deeds/${deed.id}`);
    }
  };

  const formatCurrency = (amount: string | number | undefined) => {
    if (!amount) return 'N/A';
    return new Intl.NumberFormat('en-US', {
      style: 'currency',
      currency: 'USD',
    }).format(typeof amount === 'string' ? parseFloat(amount) : amount);
  };

  const formatDate = (dateString: string) => {
    return new Date(dateString).toLocaleDateString('en-US', {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
    });
  };

  const statCards = [
    {
      title: 'Total Deeds',
      count: stats.total_count,
      subtitle: 'Cemetery deed records',
      icon: FileText,
      textColor: 'text-blue-600 dark:text-blue-400',
      bgColor: 'bg-blue-50 dark:bg-blue-900/20',
    },
    {
      title: 'Total Occupied',
      count: stats.total_occupied,
      subtitle: 'Burial spaces used',
      icon: Users,
      textColor: 'text-purple-600 dark:text-purple-400',
      bgColor: 'bg-purple-50 dark:bg-purple-900/20',
    },
  ];

  return (
    <AppLayout breadcrumbs={breadcrumbs}>
      <Head title={t('Deeds')} />

      <div className="flex h-full flex-1 flex-col gap-4 overflow-x-auto rounded-xl p-4">
        {/* Header */}
        <div className="flex items-center justify-between">
          <div>
            <h1 className="text-2xl font-bold text-gray-900 dark:text-gray-100">{t('Cemetery Deeds')}</h1>
            <p className="text-gray-600 dark:text-gray-400">{t('Manage burial plot deeds and ownership')}</p>
          </div>
          <Link href="/admin/deeds/create">
            <Button>
              <Plus className="h-4 w-4 me-2" />
              {t('New Deed')}
            </Button>
          </Link>
        </div>

        {/* Stats Dashboard */}
        <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
          {statCards.map((stat) => (
            <div
              key={stat.title}
              className="bg-white dark:bg-black rounded-lg border border-gray-200 dark:border-gray-700 p-4 shadow-sm"
            >
              <div className="flex items-center justify-between mb-3">
                <div className={`p-2 rounded-full ${stat.bgColor}`}>
                  <stat.icon className={`h-5 w-5 ${stat.textColor}`} />
                </div>
              </div>
              <div>
                <p className="text-sm font-medium text-gray-600 dark:text-gray-400">
                  {stat.title}
                </p>
                <p className={`text-2xl font-bold mt-1 ${stat.textColor}`}>
                  {stat.count}
                </p>
                <p className="text-xs text-gray-500 dark:text-gray-400 mt-1">
                  {stat.subtitle}
                </p>
              </div>
            </div>
          ))}
        </div>

        {/* Filters */}
        <div className="bg-white dark:bg-black rounded-lg border border-gray-200 dark:border-gray-700 p-4 shadow-sm">
          <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
            <div className="md:col-span-1">
              <div className="relative">
                <Search className="absolute start-3 top-3 h-4 w-4 text-gray-400" />
                <Input
                  placeholder={t('Search deeds, locations...')}
                  value={search}
                  onChange={(e) => setSearch(e.target.value)}
                  onKeyDown={(e) => e.key === 'Enter' && handleFilter()}
                  className="ps-9"
                />
              </div>
            </div>
            <div>
              <Select value={memberId ?? ' '} onValueChange={setMemberId}>
                <SelectTrigger>
                  <SelectValue placeholder={t('All Members')} />
                </SelectTrigger>
                <SelectContent>
                  <SelectItem value=" ">{t('All Members')}</SelectItem>
                  {members.map((member) => (
                    <SelectItem key={member.id} value={member.id.toString()}>
                      {member.first_name} {member.last_name}
                    </SelectItem>
                  ))}
                </SelectContent>
              </Select>
            </div>
            <div className="flex gap-2">
              <Button onClick={handleFilter} className="flex-1">
                <Filter className="h-4 w-4 me-2" />
                {t('Filter')}
              </Button>
              <Button onClick={handleClearFilters} variant="outline" className="flex-1">
                {t('Clear')}
              </Button>
            </div>
          </div>
        </div>

        {/* Deeds Table */}
        <div className="bg-white dark:bg-black rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm overflow-hidden">
          <div className="overflow-x-auto">
            <table className="w-full">
              <thead className="bg-gray-50 dark:bg-gray-900/50 border-b border-gray-200 dark:border-gray-700">
                <tr>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Deed Number')}
                  </th>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Owner')}
                  </th>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Type')}
                  </th>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Capacity')}
                  </th>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Purchase Date')}
                  </th>
                  <th className="px-4 py-3 text-start text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Status')}
                  </th>
                  <th className="px-4 py-3 text-end text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
                    {t('Actions')}
                  </th>
                </tr>
              </thead>
              <tbody className="divide-y divide-gray-200 dark:divide-gray-700">
                {deeds.data.map((deed) => {
                  // Calculate capacity from gravesites
                  const totalCapacity = Array.isArray(deed.gravesites)
                    ? deed.gravesites.reduce((sum, g) => sum + getGravesiteCapacity(g.gravesite_type), 0)
                    : 0;
                  const availableSpace = totalCapacity - (Number(deed.occupied) || 0);
                  
                  // Get unique gravesite types
                  const gravesiteTypes = Array.isArray(deed.gravesites)
                    ? [...new Set(deed.gravesites.map(g => g.gravesite_type))].join(', ')
                    : 'N/A';
                  
                  return (
                    <tr
                      key={deed.id}
                      className="hover:bg-gray-50 dark:hover:bg-gray-900/50 transition-colors"
                    >
                      <td className="px-4 py-3 text-sm">
                        <Link
                          href={`/admin/deeds/${deed.id}`}
                          className="font-medium text-blue-600 dark:text-blue-400 hover:underline"
                        >
                          {deed.deed_number}
                        </Link>
                      </td>
                      <td className="px-4 py-3 text-sm text-gray-900 dark:text-gray-100">
                        {deed.member ? (
                          <Link
                            href={`/admin/members/${deed.member.id}`}
                            className="hover:underline"
                          >
                            {deed.member.first_name} {deed.member.last_name}
                          </Link>
                        ) : (
                          <span className="text-gray-400">{t('N/A')}</span>
                        )}
                      </td>
                      <td className="px-4 py-3 text-sm">
                        <span className="text-gray-900 dark:text-gray-100">
                          {gravesiteTypes}
                        </span>
                      </td>
                      <td className="px-4 py-3 text-sm text-gray-900 dark:text-gray-100">
                        <div className="flex items-center gap-2">
                          <span>{deed.occupied || 0}/{totalCapacity}</span>
                          {availableSpace > 0 ? (
                            <CheckCircle className="h-4 w-4 text-green-500" />
                          ) : (
                            <XCircle className="h-4 w-4 text-red-500" />
                          )}
                        </div>
                      </td>
                      <td className="px-4 py-3 text-sm text-gray-600 dark:text-gray-400">
                        {formatDate(deed.purchase_date)}
                      </td>
                      <td className="px-4 py-3 text-sm">
                        {deed.is_active ? (
                          <Badge className="bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400">
                            {t('Active')}
                          </Badge>
                        ) : (
                          <Badge className="bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400">
                            {t('Inactive')}
                          </Badge>
                        )}
                      </td>
                      <td className="px-4 py-3 text-sm text-end">
                        <div className="flex items-center justify-end gap-2">
                          <Link href={`/admin/deeds/${deed.id}/edit`}>
                            <Button variant="ghost" size="sm">
                              <Edit className="h-4 w-4" />
                            </Button>
                          </Link>
                          <Button
                            variant="ghost"
                            size="sm"
                            onClick={() => handleDelete(deed)}
                          >
                            <Trash2 className="h-4 w-4" />
                          </Button>
                        </div>
                      </td>
                    </tr>
                  );
                })}
              </tbody>
            </table>
          </div>

          {/* Empty State */}
          {deeds.data.length === 0 && (
            <div className="p-12 text-center">
              <FileText className="h-12 w-12 text-gray-400 mx-auto mb-4" />
              <h3 className="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2">{t('No deeds found')}</h3>
              <p className="text-gray-600 dark:text-gray-400 mb-4">{t('Get started by creating your first cemetery deed.')}</p>
              <Link href="/admin/deeds/create">
                <Button>
                  <Plus className="me-2 h-4 w-4" />
                  {t('Create Deed')}
                </Button>
              </Link>
            </div>
          )}

          {/* Pagination */}
          {deeds.last_page > 1 && (
            <div className="px-4 py-3 border-t border-gray-200 dark:border-gray-700 flex items-center justify-between">
              <div className="text-sm text-gray-600 dark:text-gray-400">
                Page {deeds.current_page} of {deeds.last_page}
              </div>
              <div className="flex gap-2">
                <Button
                  variant="outline"
                  size="sm"
                  disabled={deeds.current_page === 1}
                  onClick={() =>
                    router.get(`/admin/deeds?page=${deeds.current_page - 1}`)
                  }
                >
                  {t('Previous')}
                </Button>
                <Button
                  variant="outline"
                  size="sm"
                  disabled={deeds.current_page === deeds.last_page}
                  onClick={() =>
                    router.get(`/admin/deeds?page=${deeds.current_page + 1}`)
                  }
                >
                  {t('Next')}
                </Button>
              </div>
            </div>
          )}
        </div>
      </div>
    </AppLayout>
  );
}
