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

interface WastageItem {
  id: number;
  category: string;
  item_name: string;
  quantity: number;
  unit: string;
  estimated_value: number;
  reason: string;
  description: string | null;
  status: 'PENDING' | 'APPROVED' | 'REJECTED';
  reported_at: string;
  reporter?: { name: string };
  approver?: { name: string };
  reported_by: number;
}

interface Props {
  records: {
    data: WastageItem[];
    links: any[];
  };
}

export default function Index({ records }: 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({
    category: 'Cakes',
    item_name: '',
    quantity: 1,
    unit: 'pcs',
    estimated_value: '',
    reason: 'DAMAGED',
    description: '',
  });

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

  const handleApprove = (id: number) => {
    router.post(route('wastage.approve', id));
  };

  const handleReject = (id: number) => {
    router.post(route('wastage.reject', id));
  };

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

  return (
    <AuthenticatedLayout>
      <Head title="Wastage Register - 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">
              <Trash2 className={`w-7 h-7 ${accentText}`} />
              <span>Operational Wastage & Spoilage Register</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              Log damaged cakes, expired pastries, and production losses for branch reporting
            </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>Report Wastage Entry</span>
          </button>
        </div>

        {/* Wastage 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">Reported Date</th>
                  <th className="p-4">Item & Category</th>
                  <th className="p-4 text-center">Qty</th>
                  <th className="p-4 text-right">Est. Value</th>
                  <th className="p-4">Reason</th>
                  <th className="p-4">Reported By</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 font-medium">
                {records.data.map((row) => {
                  const isOwnSubmission = row.reported_by === user?.id && !user?.is_admin;
                  return (
                    <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-semibold">
                        {new Date(row.reported_at).toLocaleString()}
                      </td>

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

                      <td className="p-4 text-center font-bold text-slate-900 dark:text-white">
                        {row.quantity} {row.unit}
                      </td>

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

                      <td className="p-4">
                        <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.reason}
                        </span>
                      </td>

                      <td className="p-4 font-semibold text-slate-700 dark:text-slate-300">
                        {row.reporter?.name || 'Staff'}
                      </td>

                      <td className="p-4 text-center">
                        <span
                          className={`px-3 py-1 rounded-full text-[11px] font-semibold ${
                            row.status === 'APPROVED'
                              ? 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20'
                              : row.status === 'REJECTED'
                              ? 'bg-rose-500/10 text-rose-600 dark:text-rose-400 border border-rose-500/20'
                              : 'bg-amber-500/10 text-amber-600 dark:text-amber-400 border border-amber-500/20'
                          }`}
                        >
                          {row.status}
                        </span>
                      </td>

                      <td className="p-4 text-center">
                        {row.status === 'PENDING' ? (
                          isOwnSubmission ? (
                            <span className="text-[11px] text-slate-400 dark:text-slate-500 italic">Self-approval restricted</span>
                          ) : (
                            <div className="flex items-center justify-center space-x-2">
                              <button
                                onClick={() => handleApprove(row.id)}
                                className="px-3 py-1.5 bg-emerald-600 hover:bg-emerald-700 text-white font-semibold text-xs rounded-xl shadow-xs transition-colors"
                              >
                                Approve
                              </button>
                              <button
                                onClick={() => handleReject(row.id)}
                                className="px-3 py-1.5 bg-rose-600 hover:bg-rose-700 text-white font-semibold text-xs rounded-xl shadow-xs transition-colors"
                              >
                                Reject
                              </button>
                            </div>
                          )
                        ) : (
                          <span className="text-[11px] text-slate-500 dark:text-slate-400 font-semibold">
                            {row.approver?.name ? `By ${row.approver.name}` : 'Processed'}
                          </span>
                        )}

                        {user?.is_admin && (
                          <button
                            onClick={() => handleDelete(row.id)}
                            className="p-1.5 ml-1 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>
                  );
                })}

                {records.data.length === 0 && (
                  <tr>
                    <td colSpan={8} className="p-8 text-center text-slate-400 dark:text-slate-500 font-medium">
                      No wastage records reported for this branch.
                    </td>
                  </tr>
                )}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* CREATE WASTAGE 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">
                <Trash2 className={`w-5 h-5 ${accentText}`} />
                <span>Report Spoilage / Wastage 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">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="Cakes">Cakes</option>
                    <option value="Pastries">Pastries & Slices</option>
                    <option value="Savories">Savories & Breads</option>
                    <option value="Beverages">Beverages</option>
                    <option value="Addons">Party Addons</option>
                    <option value="Raw Materials">Raw Materials</option>
                  </select>
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Item Name *</label>
                  <input
                    type="text"
                    required
                    placeholder="e.g. Belgian Truffle Cake 1kg"
                    value={data.item_name}
                    onChange={(e) => setData('item_name', 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>

              <div className="grid grid-cols-3 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Quantity *</label>
                  <input
                    type="number"
                    min="1"
                    required
                    value={data.quantity}
                    onChange={(e) => setData('quantity', parseInt(e.target.value, 10))}
                    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">Unit</label>
                  <input
                    type="text"
                    value={data.unit}
                    onChange={(e) => setData('unit', 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">Est. Value (₹) *</label>
                  <input
                    type="number"
                    step="0.01"
                    min="0"
                    required
                    placeholder="850.00"
                    value={data.estimated_value}
                    onChange={(e) => setData('estimated_value', 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>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Wastage Reason *</label>
                <select
                  value={data.reason}
                  onChange={(e) => setData('reason', 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="DAMAGED">DAMAGED (Handling damage)</option>
                  <option value="EXPIRED">EXPIRED (Past shelf life)</option>
                  <option value="SPOILED">SPOILED (Storage / Chiller failure)</option>
                  <option value="BURNED">BURNED (Baking error)</option>
                  <option value="WRONG_ORDER">WRONG_ORDER (Customer cancellation)</option>
                  <option value="CUSTOMER_RETURN">CUSTOMER_RETURN</option>
                  <option value="PRODUCTION_ERROR">PRODUCTION_ERROR</option>
                  <option value="OTHER">OTHER</option>
                </select>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Description / Notes</label>
                <textarea
                  rows={2}
                  placeholder="Details regarding the wastage..."
                  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`}
                >
                  Submit Wastage
                </button>
              </div>
            </form>
          </div>
        </div>
      )}
    </AuthenticatedLayout>
  );
}

