import React, { useState, useEffect } from 'react';
import { Head, useForm, usePage, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { DollarSign, Plus, X, Trash2 } from '@/Components/AnimatedIcons';
import { PageProps } from '@/types';

interface ExpenseItem {
  id: number;
  expense_date: string;
  category: string;
  amount: number;
  description: string | null;
  paid_by: string | null;
  payment_method: string;
  creator?: { name: string };
}

interface Props {
  expenses: {
    data: ExpenseItem[];
    links: any[];
  };
}

export default function Index({ expenses }: Props) {
  const { auth } = usePage<PageProps>().props;
  const user = auth.user;

  const [showAddModal, setShowAddModal] = useState(false);
  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 { data, setData, post, processing, errors, reset } = useForm({
    expense_date: new Date().toISOString().split('T')[0],
    category: 'Petty Cash',
    amount: '',
    description: '',
    paid_by: '',
    payment_method: 'CASH',
  });

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    post(route('expenses.store'), {
      onSuccess: () => {
        reset();
        setShowAddModal(false);
      }
    });
  };

  const handleDelete = (id: number) => {
    if (confirm('Are you sure you want to permanently delete this expense? This cannot be undone.')) {
      router.delete(route('expenses.destroy', id));
    }
  };

  return (
    <AuthenticatedLayout>
      <Head title="Branch Expenses - Cakes & Candles" />

      <div className="space-y-6">
        {/* Header */}
        <div className="flex flex-col sm:flex-row sm: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">
              <DollarSign className={`w-7 h-7 ${accentText}`} />
              <span>Branch Operational Expense Register</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              Track store petty cash, electricity, packaging, cleaning, and maintenance expenses
            </p>
          </div>

          <button
            onClick={() => setShowAddModal(true)}
            className={`px-4 py-2.5 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-md flex items-center space-x-2 transition-all`}
          >
            <Plus className="w-4 h-4" />
            <span>Log Branch Expense</span>
          </button>
        </div>

        {/* Expenses 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 uppercase font-semibold text-[11px] tracking-wider border-b border-slate-200 dark:border-slate-800">
                <tr>
                  <th className="p-4">Expense Date</th>
                  <th className="p-4">Category & Description</th>
                  <th className="p-4 text-right">Amount</th>
                  <th className="p-4 text-center">Payment Method</th>
                  <th className="p-4">Paid By</th>
                  <th className="p-4">Logged By</th>
                  <th className="p-4 text-center">Actions</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60 font-medium">
                {expenses.data.map((row) => (
                  <tr key={row.id} className="hover:bg-slate-50/70 dark:hover:bg-slate-800/40 transition-colors">
                    <td className="p-4 text-slate-600 dark:text-slate-400  text-xs font-bold">
                      {row.expense_date}
                    </td>

                    <td className="p-4">
                      <span className="font-bold text-slate-900 dark:text-white block">{row.category}</span>
                      {row.description && <span className="text-[11px] text-slate-400 dark:text-slate-500 mt-0.5 block">{row.description}</span>}
                    </td>

                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white text-sm">
                      ₹{Number(row.amount).toFixed(2)}
                    </td>

                    <td className="p-4 text-center">
                      <span className="px-2.5 py-1 bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300 text-[11px] font-semibold rounded-full border border-slate-200 dark:border-slate-700 ">
                        {row.payment_method}
                      </span>
                    </td>

                    <td className="p-4 text-slate-700 dark:text-slate-300 font-semibold">
                      {row.paid_by || 'Store Cash'}
                    </td>

                    <td className="p-4 text-slate-600 dark:text-slate-400 font-medium">
                      {row.creator?.name || 'Staff'}
                    </td>

                    <td className="p-4 text-center">
                      {user?.is_admin && (
                        <button
                          onClick={() => handleDelete(row.id)}
                          className="p-1.5 text-rose-500 hover:bg-rose-50 dark:hover:bg-rose-900/30 rounded-lg transition-colors inline-block"
                          title="Delete Permanently"
                        >
                          <Trash2 className="w-4 h-4" />
                        </button>
                      )}
                    </td>
                  </tr>
                ))}

                {expenses.data.length === 0 && (
                  <tr>
                    <td colSpan={7} className="p-8 text-center text-slate-400 dark:text-slate-500 font-medium">
                      No operational expenses logged yet.
                    </td>
                  </tr>
                )}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* CREATE EXPENSE MODAL */}
      {showAddModal && (
        <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 space-y-5 shadow-2xl 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 flex items-center space-x-2">
                <DollarSign className={`w-5 h-5 ${accentText}`} />
                <span>Log Branch Expense Entry</span>
              </h3>
              <button onClick={() => setShowAddModal(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 className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Expense Date *</label>
                  <input
                    type="date"
                    required
                    value={data.expense_date}
                    onChange={(e) => setData('expense_date', 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"
                  />
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Category *</label>
                  <select
                    value={data.category}
                    onChange={(e) => setData('category', 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"
                  >
                    <option value="Petty Cash">Petty Cash</option>
                    <option value="Electricity">Electricity / Utility</option>
                    <option value="Cleaning">Cleaning & Sanitation</option>
                    <option value="Packaging">Packaging Supplies</option>
                    <option value="Courier">Courier / Delivery</option>
                    <option value="Maintenance">Equipment Maintenance</option>
                    <option value="Other">Other Operational</option>
                  </select>
                </div>
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Amount (₹) *</label>
                  <input
                    type="number"
                    step="0.01"
                    min="0.01"
                    required
                    placeholder="1500.00"
                    value={data.amount}
                    onChange={(e) => setData('amount', 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 focus:outline-none"
                  />
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Payment Method *</label>
                  <select
                    value={data.payment_method}
                    onChange={(e) => setData('payment_method', 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"
                  >
                    <option value="CASH">Cash (Store Drawer)</option>
                    <option value="UPI">UPI Digital</option>
                    <option value="CARD">Card / Machine</option>
                    <option value="BANK_TRANSFER">Bank Transfer</option>
                  </select>
                </div>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Paid To / Recipient</label>
                <input
                  type="text"
                  placeholder="e.g. Electric Vendor / Local Courier"
                  value={data.paid_by}
                  onChange={(e) => setData('paid_by', 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"
                />
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Description / Voucher Details</label>
                <textarea
                  rows={2}
                  placeholder="Details regarding the expense..."
                  value={data.description}
                  onChange={(e) => setData('description', 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"
                />
              </div>

              <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
                <button
                  type="button"
                  onClick={() => setShowAddModal(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"
                  disabled={processing}
                  className={`px-5 py-2.5 ${accentBg} text-white font-semibold rounded-xl shadow-md transition-all`}
                >
                  Log Expense
                </button>
              </div>
            </form>
          </div>
        </div>
      )}
    </AuthenticatedLayout>
  );
}

