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

interface Props {
  closings: {
    data: DailyClosing[];
  };
  filters: {
    date?: string;
    branch_id?: string;
  };
}

export default function DailyClosingIndex({ closings, filters }: Props) {
  const { auth } = usePage<PageProps>().props;
  const user = auth.user;

  const [selectedClosing, setSelectedClosing] = useState<DailyClosing | null>(null);
  const [approvalStatus, setApprovalStatus] = useState<'APPROVED' | 'REJECTED'>('APPROVED');
  const [notes, setNotes] = useState('');
  const [showApproveModal, setShowApproveModal] = 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 openApproveModal = (dc: DailyClosing, status: 'APPROVED' | 'REJECTED') => {
    setSelectedClosing(dc);
    setApprovalStatus(status);
    setNotes('');
    setShowApproveModal(true);
  };

  const handleApprove = () => {
    if (!selectedClosing) return;
    router.post(route('daily-closing.approve', selectedClosing.id), {
      status: approvalStatus,
      notes,
    }, {
      onSuccess: () => setShowApproveModal(false),
    });
  };

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

  return (
    <AuthenticatedLayout>
      <Head title="Daily Closing Tally - Cakes & Candles" />

      <div className="space-y-6">
        <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">
              <Clock className={`w-7 h-7 ${accentText}`} />
              <span>Daily Cashier Closing Ledger</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              End-of-day cash reconciliation, system expected vs actual count, and manager approvals
            </p>
          </div>

          <Link
            href={route('daily-closing.create')}
            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 self-start md:self-auto`}
          >
            <Plus className="w-4 h-4" />
            <span>Submit Today's Closing</span>
          </Link>
        </div>

        {/* 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">Business Date</th>
                  <th className="p-4">Branch</th>
                  <th className="p-4">Cashier</th>
                  <th className="p-4 text-center">Bills Count</th>
                  <th className="p-4 text-right">Expected Cash</th>
                  <th className="p-4 text-right">Actual Cash</th>
                  <th className="p-4 text-right">Variance</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">
                {closings.data.map((dc) => (
                  <tr key={dc.id} className="hover:bg-slate-50/70 dark:hover:bg-slate-800/40 transition-colors">
                    <td className="p-4  text-slate-900 dark:text-white">
                      <div className="font-bold">{dc.closing_date}</div>
                      <div className="text-[10px] text-slate-400 mt-0.5">Sub: {dc.created_at}</div>
                    </td>
                    <td className="p-4 font-semibold text-slate-900 dark:text-white">
                      {dc.branch?.name}
                    </td>
                    <td className="p-4 font-semibold text-slate-700 dark:text-slate-300">
                      {dc.cashier?.name}
                    </td>
                    <td className="p-4 text-center font-bold text-slate-700 dark:text-slate-300">
                      {dc.total_bills} ({dc.voided_bills} voided)
                    </td>
                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white">
                      ₹{Number(dc.expected_cash).toFixed(2)}
                    </td>
                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white">
                      ₹{Number(dc.actual_cash).toFixed(2)}
                    </td>
                    <td className="p-4 text-right  font-bold">
                      <span className={Number(dc.variance) === 0 ? 'text-emerald-600 dark:text-emerald-400' : 'text-rose-600 dark:text-rose-400'}>
                        ₹{Number(dc.variance).toFixed(2)}
                      </span>
                    </td>
                    <td className="p-4 text-center">
                      <span
                        className={`px-3 py-1 rounded-full text-[11px] font-semibold ${
                          dc.status === 'APPROVED'
                            ? 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20'
                            : dc.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'
                        }`}
                      >
                        {dc.status}
                      </span>
                    </td>
                    <td className="p-4 text-center">
                      {user?.is_admin && dc.status === 'SUBMITTED' ? (
                        <div className="flex items-center justify-center space-x-1.5">
                          <button
                            onClick={() => openApproveModal(dc, 'APPROVED')}
                            className="p-1.5 bg-emerald-600 text-white rounded-lg hover:bg-emerald-700 font-semibold text-xs transition-colors"
                            title="Approve Tally"
                          >
                            <Check className="w-4 h-4" />
                          </button>
                          <button
                            onClick={() => openApproveModal(dc, 'REJECTED')}
                            className="p-1.5 bg-rose-600 text-white rounded-lg hover:bg-rose-700 font-semibold text-xs transition-colors"
                            title="Reject Tally"
                          >
                            <X className="w-4 h-4" />
                          </button>
                        </div>
                      ) : (
                        <span className="text-slate-400 dark:text-slate-500 text-xs font-medium italic">
                          {dc.approvedBy ? `by ${dc.approvedBy.name}` : 'Completed'}
                        </span>
                      )}
                      
                      {user?.is_admin && (
                        <button
                          onClick={() => handleDelete(dc.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>
                ))}

                {closings.data.length === 0 && (
                  <tr>
                    <td colSpan={9} className="p-12 text-center text-slate-400 dark:text-slate-500 font-medium">
                      No daily closing records found.
                    </td>
                  </tr>
                )}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* APPROVE MODAL */}
      {showApproveModal && selectedClosing && (
        <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-md 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">
                {approvalStatus === 'APPROVED' ? 'Approve Daily Closing' : 'Reject Daily Closing'}
              </h3>
              <button onClick={() => setShowApproveModal(false)} className="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200">
                <X className="w-5 h-5" />
              </button>
            </div>

            <p className="text-xs text-slate-600 dark:text-slate-400 font-medium">
              Daily closing for <strong className="text-slate-900 dark:text-white">{selectedClosing.closing_date}</strong> with variance ₹{selectedClosing.variance}.
            </p>

            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Manager Audit Notes</label>
              <textarea
                value={notes}
                onChange={(e) => setNotes(e.target.value)}
                placeholder="Add optional 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={3}
              />
            </div>

            <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
              <button
                onClick={() => setShowApproveModal(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
                onClick={handleApprove}
                className={`px-5 py-2.5 text-white font-semibold rounded-xl shadow-md transition-all ${
                  approvalStatus === 'APPROVED' ? 'bg-emerald-600 hover:bg-emerald-700' : 'bg-rose-600 hover:bg-rose-700'
                }`}
              >
                Confirm {approvalStatus}
              </button>
            </div>
          </div>
        </div>
      )}
    </AuthenticatedLayout>
  );
}

