import React, { useState, useEffect } from 'react';
import { Head, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { AuditLog } from '@/types';
import { ShieldCheck, Search } from '@/Components/AnimatedIcons';

interface Props {
  logs: {
    data: AuditLog[];
  };
  filters: {
    action?: string;
  };
}

export default function AuditLogsIndex({ logs, filters }: Props) {
  const [action, setAction] = useState(filters.action || '');
  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 handleSearch = (e: React.FormEvent) => {
    e.preventDefault();
    router.get(route('admin.audit-logs.index'), { action }, { preserveState: true });
  };

  return (
    <AuthenticatedLayout>
      <Head title="Security Audit Trail - Cakes & Candles" />

      <div className="space-y-6">
        <div>
          <h1 className="text-2xl font-bold text-slate-900 dark:text-white flex items-center space-x-2.5">
            <ShieldCheck className={`w-7 h-7 ${accentText}`} />
            <span>Security & Business Audit Logs</span>
          </h1>
          <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
            Immutable system audit trail tracking sensitive actions (Login, Invoices, Voids, Closings, Settings)
          </p>
        </div>

        <form onSubmit={handleSearch} className="bg-white dark:bg-slate-900 p-4 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm flex 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={action}
              onChange={(e) => setAction(e.target.value)}
              placeholder="Search action keyword (e.g. INVOICE_CREATED, PRODUCT_UPDATED)..."
              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>
          <button type="submit" className={`px-5 py-2 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-sm transition-all`}>
            Search Logs
          </button>
        </form>

        <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">Timestamp</th>
                  <th className="p-4">User</th>
                  <th className="p-4">Action Code</th>
                  <th className="p-4">Target Entity</th>
                  <th className="p-4">Reason / Details</th>
                  <th className="p-4">IP Address</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60 font-medium">
                {logs.data.map((log) => (
                  <tr key={log.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">
                      {new Date(log.created_at).toLocaleString()}
                    </td>
                    <td className="p-4 font-semibold text-slate-900 dark:text-white">
                      {log.user?.name || 'System'}
                    </td>
                    <td className="p-4">
                      <span className="bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-700 px-2.5 py-1 rounded-full  font-bold text-[11px] uppercase">
                        {log.action}
                      </span>
                    </td>
                    <td className="p-4 font-medium text-slate-600 dark:text-slate-400">
                      {log.entity_type} {log.entity_id ? `#${log.entity_id}` : ''}
                    </td>
                    <td className="p-4 text-slate-600 dark:text-slate-400 font-medium">
                      {log.reason || (log.new_values ? JSON.stringify(log.new_values) : '-')}
                    </td>
                    <td className="p-4  text-[11px] text-slate-400 dark:text-slate-500">
                      {log.ip_address || '127.0.0.1'}
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </AuthenticatedLayout>
  );
}

