import React, { useState, useEffect } from 'react';
import { Head, Link, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Category, Product } from '@/types';
import { Package, Plus, Search, Edit3, Power, FolderTree, X } from '@/Components/AnimatedIcons';

interface Props {
  products: {
    data: Product[];
    links: any[];
  };
  categories: Category[];
  filters: {
    search?: string;
    category_id?: string;
  };
}

export default function ProductsIndex({ products, categories, filters }: Props) {
  const [search, setSearch] = useState(filters.search || '');
  const [categoryId, setCategoryId] = useState(filters.category_id || '');
  const [accentColor, setAccentColor] = useState<string>(() => localStorage.getItem('admin_accent_color') || 'pink');

  useEffect(() => {
    const handleAccentChange = (e: CustomEvent) => setAccentColor(e.detail);
    window.addEventListener('theme_accent_changed', handleAccentChange as EventListener);
    return () => window.removeEventListener('theme_accent_changed', handleAccentChange as EventListener);
  }, []);

  const accentBg = accentColor === 'seagreen' ? 'bg-[#0CA996] hover:bg-[#098878]' : 'bg-[#FF0D8F] hover:bg-[#d90978]';
  const accentText = accentColor === 'seagreen' ? 'text-[#0CA996]' : 'text-[#FF0D8F]';
  const accentBorder = accentColor === 'seagreen' ? 'border-[#0CA996]/30' : 'border-[#FF0D8F]/30';

  // Modal State
  const [showModal, setShowModal] = useState(false);
  const [editingProduct, setEditingProduct] = useState<Product | null>(null);

  const [formCategory, setFormCategory] = useState<number>(categories[0]?.id || 1);
  const [formName, setFormName] = useState('');
  const [formSku, setFormSku] = useState('');
  const [formPrice, setFormPrice] = useState<number>(0);
  const [formDescription, setFormDescription] = useState('');

  const openCreateModal = () => {
    setEditingProduct(null);
    setFormCategory(categories[0]?.id || 1);
    setFormName('');
    setFormSku(`CK-${Math.floor(100 + Math.random() * 900)}`);
    setFormPrice(0);
    setFormDescription('');
    setShowModal(true);
  };

  const openEditModal = (p: Product) => {
    setEditingProduct(p);
    setFormCategory(p.category_id);
    setFormName(p.name);
    setFormSku(p.sku);
    setFormPrice(Number(p.selling_price));
    setFormDescription(p.description || '');
    setShowModal(true);
  };

  const handleFilter = (e: React.FormEvent) => {
    e.preventDefault();
    router.get(route('admin.products.index'), {
      search,
      category_id: categoryId,
    }, { preserveState: true });
  };

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    const payload = {
      category_id: formCategory,
      name: formName,
      sku: formSku,
      selling_price: formPrice,
      description: formDescription,
    };

    if (editingProduct) {
      router.put(route('admin.products.update', editingProduct.id), payload, {
        onSuccess: () => setShowModal(false),
      });
    } else {
      router.post(route('admin.products.store'), payload, {
        onSuccess: () => setShowModal(false),
      });
    }
  };

  const toggleStatus = (id: number) => {
    router.post(route('admin.products.toggle', id));
  };

  return (
    <AuthenticatedLayout>
      <Head title="Products Management - Cakes & Candles" />

      <div className="space-y-6">
        {/* Header */}
        <div className="flex flex-col md:flex-row md:items-center justify-between gap-4">
          <div>
            <h1 className="text-2xl font-bold text-slate-900 dark:text-white flex items-center space-x-2.5">
              <Package className={`w-7 h-7 ${accentText}`} />
              <span>Products & Bakery Items</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              Manage bakery item catalog, SKUs, and live POS availability
            </p>
          </div>

          <div className="flex items-center space-x-3">
            <Link
              href={route('admin.categories.index')}
              className="px-4 py-2.5 bg-white dark:bg-slate-900 hover:bg-slate-50 dark:hover:bg-slate-800 text-slate-700 dark:text-slate-200 border border-slate-200 dark:border-slate-800 font-semibold text-xs rounded-xl shadow-sm transition-all flex items-center space-x-1.5"
            >
              <FolderTree className={`w-4 h-4 ${accentText}`} />
              <span>Categories</span>
            </Link>

            <button
              onClick={openCreateModal}
              className={`px-4 py-2.5 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-md transition-all flex items-center space-x-1.5`}
            >
              <Plus className="w-4 h-4" />
              <span>Add Bakery Item</span>
            </button>
          </div>
        </div>

        {/* Filter Bar */}
        <form onSubmit={handleFilter} className="bg-white dark:bg-slate-900 p-4 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm flex flex-col sm:flex-row gap-3">
          <div className="relative flex-1">
            <Search className="w-4 h-4 absolute left-3.5 top-3 text-slate-400 dark:text-slate-500" />
            <input
              type="text"
              value={search}
              onChange={(e) => setSearch(e.target.value)}
              placeholder="Search product name or SKU..."
              className="w-full pl-10 pr-3 py-2 border border-slate-200 dark:border-slate-800 dark:bg-slate-950 rounded-xl text-xs font-medium text-slate-900 dark:text-white focus:outline-none"
            />
          </div>

          <select
            value={categoryId}
            onChange={(e) => setCategoryId(e.target.value)}
            className="p-2 border border-slate-200 dark:border-slate-800 rounded-xl text-xs font-semibold text-slate-900 dark:text-white bg-slate-50 dark:bg-slate-950 focus:outline-none"
          >
            <option value="">All Categories</option>
            {categories.map((c) => (
              <option key={c.id} value={c.id}>{c.name}</option>
            ))}
          </select>

          <button
            type="submit"
            className={`px-5 py-2 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-sm transition-all`}
          >
            Filter
          </button>
        </form>

        {/* Table */}
        <div className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm overflow-hidden">
          <div className="overflow-x-auto">
            <table className="w-full text-left text-xs">
              <thead className="bg-slate-50 dark:bg-slate-950 text-slate-500 dark:text-slate-400 font-semibold uppercase tracking-wider text-[11px] border-b border-slate-200 dark:border-slate-800">
                <tr>
                  <th className="p-4">SKU</th>
                  <th className="p-4">Product Name</th>
                  <th className="p-4">Category</th>
                  <th className="p-4 text-right">Selling Price</th>
                  <th className="p-4 text-center">Status</th>
                  <th className="p-4 text-center">Actions</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60">
                {products.data.map((prod) => (
                  <tr key={prod.id} className="hover:bg-slate-50/70 dark:hover:bg-slate-800/40 transition-colors">
                    <td className="p-4  font-bold text-slate-900 dark:text-white">
                      {prod.sku}
                    </td>
                    <td className="p-4 font-semibold text-slate-900 dark:text-white">
                      {prod.name}
                    </td>
                    <td className="p-4 font-medium text-slate-600 dark:text-slate-400">
                      {prod.category?.name || 'Uncategorized'}
                    </td>
                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white text-sm">
                      ₹{Number(prod.selling_price).toFixed(2)}
                    </td>
                    <td className="p-4 text-center">
                      <span className={`px-2.5 py-1 rounded-full text-[11px] font-semibold ${
                        prod.is_active 
                          ? 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20' 
                          : 'bg-slate-500/10 text-slate-500 dark:text-slate-400 border border-slate-500/20'
                      }`}>
                        {prod.is_active ? 'Active' : 'Inactive'}
                      </span>
                    </td>
                    <td className="p-4 text-center">
                      <div className="flex items-center justify-center space-x-1.5">
                        <button
                          onClick={() => openEditModal(prod)}
                          className="p-1.5 text-slate-500 dark:text-slate-400 hover:text-slate-900 dark:hover:text-white hover:bg-slate-100 dark:hover:bg-slate-800 rounded-lg transition-colors"
                          title="Edit Item"
                        >
                          <Edit3 className="w-4 h-4" />
                        </button>
                        <button
                          onClick={() => toggleStatus(prod.id)}
                          className={`p-1.5 rounded-lg transition-colors ${
                            prod.is_active 
                              ? 'text-emerald-600 dark:text-emerald-400 hover:bg-emerald-500/10' 
                              : 'text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800'
                          }`}
                          title="Toggle Active Status"
                        >
                          <Power className="w-4 h-4" />
                        </button>
                      </div>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* CREATE / EDIT MODAL */}
      {showModal && (
        <div className="fixed inset-0 z-50 bg-slate-950/60 backdrop-blur-sm flex items-center justify-center p-4">
          <div className="bg-white dark:bg-slate-900 rounded-2xl max-w-lg w-full p-6 shadow-2xl space-y-5 border border-slate-200 dark:border-slate-800">
            <div className="flex justify-between items-center border-b border-slate-200 dark:border-slate-800 pb-3">
              <h3 className="font-bold text-base text-slate-900 dark:text-white">
                {editingProduct ? 'Edit Bakery Item' : 'Add New Bakery Product'}
              </h3>
              <button onClick={() => setShowModal(false)} className="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200">
                <X className="w-5 h-5" />
              </button>
            </div>

            <form onSubmit={handleSubmit} className="space-y-3.5 text-xs font-medium">
              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Category</label>
                <select
                  value={formCategory}
                  onChange={(e) => setFormCategory(Number(e.target.value))}
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-semibold text-slate-900 dark:text-white focus:outline-none"
                  required
                >
                  {categories.map((c) => (
                    <option key={c.id} value={c.id}>{c.name}</option>
                  ))}
                </select>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Product Name</label>
                <input
                  type="text"
                  value={formName}
                  onChange={(e) => setFormName(e.target.value)}
                  placeholder="e.g. Belgian Truffle Cake 1kg"
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-semibold text-slate-900 dark:text-white focus:outline-none"
                  required
                />
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">SKU Code</label>
                  <input
                    type="text"
                    value={formSku}
                    onChange={(e) => setFormSku(e.target.value)}
                    className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white uppercase focus:outline-none"
                    required
                  />
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Price (₹)</label>
                  <input
                    type="number"
                    step="0.01"
                    min="0"
                    value={formPrice}
                    onChange={(e) => setFormPrice(parseFloat(e.target.value) || 0)}
                    className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white focus:outline-none"
                    required
                  />
                </div>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Description (Optional)</label>
                <textarea
                  value={formDescription}
                  onChange={(e) => setFormDescription(e.target.value)}
                  placeholder="Product ingredients, weight, or special notes..."
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-semibold text-slate-900 dark:text-white focus:outline-none"
                  rows={2}
                />
              </div>

              <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
                <button
                  type="button"
                  onClick={() => setShowModal(false)}
                  className="px-4 py-2.5 bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 rounded-xl text-slate-700 dark:text-slate-300 font-semibold transition-colors"
                >
                  Cancel
                </button>
                <button
                  type="submit"
                  className={`px-5 py-2.5 ${accentBg} text-white font-semibold rounded-xl shadow-md transition-all`}
                >
                  Save Product
                </button>
              </div>
            </form>
          </div>
        </div>
      )}
    </AuthenticatedLayout>
  );
}

