import React, { useState, useEffect } from 'react';
import { Head, Link } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Customer, Invoice } from '@/types';
import { Phone, Mail, ArrowLeft } from '@/Components/AnimatedIcons';

interface Props {
  customer: Customer;
}

export default function CustomerShow({ customer }: Props) {
  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]' : 'bg-[#FF0D8F]';
  const accentText = accentColor === 'seagreen' ? 'text-[#0CA996]' : 'text-[#FF0D8F]';

  const totalSpend = customer.invoices?.reduce((sum: number, inv: Invoice) => {
    return inv.status === 'CONFIRMED' ? sum + Number(inv.grand_total) : sum;
  }, 0) || 0;

  return (
    <AuthenticatedLayout>
      <Head title={`${customer.name} - Customer History`} />

      <div className="space-y-6 max-w-5xl mx-auto">
        <Link
          href={route('admin.customers.index')}
          className="inline-flex items-center space-x-2 text-xs font-semibold text-slate-700 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white bg-white dark:bg-slate-900 px-4 py-2.5 rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm transition-colors"
        >
          <ArrowLeft className="w-4 h-4" />
          <span>Back to Customers</span>
        </Link>

        {/* Customer Header Info */}
        <div className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 p-6 shadow-sm flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
          <div className="flex items-center space-x-4">
            <div className={`w-16 h-16 rounded-2xl ${accentBg} text-white flex items-center justify-center font-bold text-2xl shadow-md`}>
              {customer.name.charAt(0)}
            </div>
            <div>
              <h1 className="text-2xl font-bold text-slate-900 dark:text-white">{customer.name}</h1>
              <div className="flex items-center space-x-4 text-xs font-medium text-slate-500 dark:text-slate-400 mt-1">
                <span className="flex items-center space-x-1.5">
                  <Phone className="w-3.5 h-3.5 text-slate-400 dark:text-slate-500" />
                  <span className="">{customer.mobile}</span>
                </span>
                {customer.email && (
                  <span className="flex items-center space-x-1.5">
                    <Mail className="w-3.5 h-3.5 text-slate-400 dark:text-slate-500" />
                    <span>{customer.email}</span>
                  </span>
                )}
              </div>
            </div>
          </div>

          <div className="bg-slate-50 dark:bg-slate-950 p-4 rounded-xl border border-slate-200 dark:border-slate-800 text-right min-w-[200px]">
            <span className="text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500 block">Total Lifetime Spend</span>
            <span className="text-2xl font-bold text-slate-900 dark:text-white mt-0.5 block">₹{totalSpend.toFixed(2)}</span>
          </div>
        </div>

        {/* Order History */}
        <div className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm overflow-hidden">
          <div className="p-4 border-b border-slate-200 dark:border-slate-800 bg-slate-50 dark:bg-slate-950 text-slate-900 dark:text-white font-bold text-sm">
            Purchase History ({customer.invoices?.length || 0} Invoices)
          </div>

          <div className="overflow-x-auto">
            <table className="w-full text-left text-xs">
              <thead className="bg-slate-50 dark:bg-slate-950 uppercase font-semibold text-slate-500 dark:text-slate-400 text-[11px] tracking-wider border-b border-slate-200 dark:border-slate-800">
                <tr>
                  <th className="p-4">Invoice #</th>
                  <th className="p-4">Date</th>
                  <th className="p-4">Branch</th>
                  <th className="p-4">Cashier</th>
                  <th className="p-4 text-right">Grand Total</th>
                  <th className="p-4 text-center">Status</th>
                  <th className="p-4 text-center">Action</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60 font-medium">
                {customer.invoices?.map((inv) => (
                  <tr key={inv.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">{inv.invoice_number}</td>
                    <td className="p-4 text-slate-600 dark:text-slate-400">{new Date(inv.issued_at).toLocaleDateString()}</td>
                    <td className="p-4 font-semibold text-slate-900 dark:text-white">{inv.branch?.name}</td>
                    <td className="p-4 font-semibold text-slate-700 dark:text-slate-300">{inv.cashier?.name}</td>
                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white">₹{Number(inv.grand_total).toFixed(2)}</td>
                    <td className="p-4 text-center">
                      <span className={`px-2.5 py-1 rounded-full text-[11px] font-semibold ${
                        inv.status === 'CONFIRMED' 
                          ? 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border border-emerald-500/20' 
                          : 'bg-rose-500/10 text-rose-600 dark:text-rose-400 border border-rose-500/20'
                      }`}>
                        {inv.status}
                      </span>
                    </td>
                    <td className="p-4 text-center">
                      <Link
                        href={route('invoices.show', inv.id)}
                        className={`${accentText} hover:underline font-semibold text-xs`}
                      >
                        Receipt
                      </Link>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </AuthenticatedLayout>
  );
}

