import React, { useState, useEffect } from 'react';
import { Head, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Branch, User } from '@/types';
import { BarChart3, Printer, DollarSign, Package, Users, Clock } from '@/Components/AnimatedIcons';

interface Props {
  reportType: string;
  reportData: any;
  branches: Branch[];
  cashiers: User[];
  filters: {
    type: string;
    start_date: string;
    end_date: string;
    branch_id?: string;
    cashier_id?: string;
    payment_method?: string;
  };
}

export default function ReportsIndex({ reportType, reportData, branches, cashiers, filters }: Props) {
  const [type, setType] = useState(filters.type || 'sales');
  const [startDate, setStartDate] = useState(filters.start_date || '');
  const [endDate, setEndDate] = useState(filters.end_date || '');
  const [branchId, setBranchId] = useState(filters.branch_id || '');
  const [cashierId, setCashierId] = useState(filters.cashier_id || '');
  const [paymentMethod, setPaymentMethod] = useState(filters.payment_method || '');
  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 handleFilter = (e?: React.FormEvent) => {
    if (e) e.preventDefault();
    router.get(route('admin.reports.index'), {
      type,
      start_date: startDate,
      end_date: endDate,
      branch_id: branchId,
      cashier_id: cashierId,
      payment_method: paymentMethod,
    }, { preserveState: true });
  };

  const switchTab = (newType: string) => {
    setType(newType);
    router.get(route('admin.reports.index'), {
      type: newType,
      start_date: startDate,
      end_date: endDate,
      branch_id: branchId,
      cashier_id: cashierId,
      payment_method: paymentMethod,
    }, { preserveState: true });
  };

  const handlePrint = () => {
    window.print();
  };

  return (
    <AuthenticatedLayout>
      <Head title="Financial & Business Reports - 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">
              <BarChart3 className={`w-7 h-7 ${accentText}`} />
              <span>Financial & Sales Reports Center</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              Authoritative transaction analytics & financial reporting engine
            </p>
          </div>

          <div className="flex space-x-2 no-print">
            <button
              onClick={handlePrint}
              className="px-4 py-2.5 bg-white dark:bg-slate-900 hover:bg-slate-50 dark:hover:bg-slate-800 text-slate-700 dark:text-slate-200 border border-slate-200 dark:border-slate-800 font-semibold text-xs rounded-xl shadow-sm flex items-center space-x-2 transition-colors"
            >
              <Printer className="w-4 h-4 text-slate-500 dark:text-slate-400" />
              <span>Print Report</span>
            </button>
          </div>
        </div>

        {/* Report Type Tabs */}
        <div className="flex items-center space-x-2 border-b border-slate-200 dark:border-slate-800 pb-3 overflow-x-auto no-print">
          <button
            onClick={() => switchTab('sales')}
            className={`px-4 py-2.5 rounded-xl text-xs font-semibold transition-all flex items-center space-x-2 whitespace-nowrap ${
              type === 'sales' 
                ? `${accentBg} text-white shadow-sm` 
                : 'bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800'
            }`}
          >
            <BarChart3 className="w-4 h-4" />
            <span>Sales Summary</span>
          </button>

          <button
            onClick={() => switchTab('payments')}
            className={`px-4 py-2.5 rounded-xl text-xs font-semibold transition-all flex items-center space-x-2 whitespace-nowrap ${
              type === 'payments' 
                ? `${accentBg} text-white shadow-sm` 
                : 'bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800'
            }`}
          >
            <DollarSign className="w-4 h-4" />
            <span>Payments Breakdown</span>
          </button>

          <button
            onClick={() => switchTab('products')}
            className={`px-4 py-2.5 rounded-xl text-xs font-semibold transition-all flex items-center space-x-2 whitespace-nowrap ${
              type === 'products' 
                ? `${accentBg} text-white shadow-sm` 
                : 'bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800'
            }`}
          >
            <Package className="w-4 h-4" />
            <span>Product Sales</span>
          </button>

          <button
            onClick={() => switchTab('cashiers')}
            className={`px-4 py-2.5 rounded-xl text-xs font-semibold transition-all flex items-center space-x-2 whitespace-nowrap ${
              type === 'cashiers' 
                ? `${accentBg} text-white shadow-sm` 
                : 'bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800'
            }`}
          >
            <Users className="w-4 h-4" />
            <span>Cashier Performance</span>
          </button>

          <button
            onClick={() => switchTab('closings')}
            className={`px-4 py-2.5 rounded-xl text-xs font-semibold transition-all flex items-center space-x-2 whitespace-nowrap ${
              type === 'closings' 
                ? `${accentBg} text-white shadow-sm` 
                : 'bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-800 hover:bg-slate-50 dark:hover:bg-slate-800'
            }`}
          >
            <Clock className="w-4 h-4" />
            <span>Daily Closings</span>
          </button>
        </div>

        {/* Filter Bar */}
        <form onSubmit={handleFilter} className="bg-white dark:bg-slate-900 p-4 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-3 items-end no-print">
          <div>
            <label className="block text-[11px] font-semibold uppercase text-slate-500 dark:text-slate-400 mb-1">Start Date</label>
            <input
              type="date"
              value={startDate}
              onChange={(e) => setStartDate(e.target.value)}
              className="w-full p-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>

          <div>
            <label className="block text-[11px] font-semibold uppercase text-slate-500 dark:text-slate-400 mb-1">End Date</label>
            <input
              type="date"
              value={endDate}
              onChange={(e) => setEndDate(e.target.value)}
              className="w-full p-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>

          <div>
            <label className="block text-[11px] font-semibold uppercase text-slate-500 dark:text-slate-400 mb-1">Branch</label>
            <select
              value={branchId}
              onChange={(e) => setBranchId(e.target.value)}
              className="w-full p-2 border border-slate-200 dark:border-slate-800 rounded-xl text-xs font-semibold text-slate-900 dark:text-white bg-slate-50 dark:bg-slate-950 focus:outline-none"
            >
              <option value="">All Branches</option>
              {branches.map((b) => (
                <option key={b.id} value={b.id}>{b.name}</option>
              ))}
            </select>
          </div>

          {type === 'payments' && (
            <div>
              <label className="block text-[11px] font-semibold uppercase text-slate-500 dark:text-slate-400 mb-1">Payment Method</label>
              <select
                value={paymentMethod}
                onChange={(e) => setPaymentMethod(e.target.value)}
                className="w-full p-2 border border-slate-200 dark:border-slate-800 rounded-xl text-xs font-semibold text-slate-900 dark:text-white bg-slate-50 dark:bg-slate-950 focus:outline-none"
              >
                <option value="">All Methods</option>
                <option value="CASH">CASH</option>
                <option value="UPI">UPI</option>
                <option value="CARD">CARD</option>
              </select>
            </div>
          )}

          <div className="flex space-x-2">
            <button type="submit" className={`w-full py-2.5 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-sm transition-all`}>
              Apply Filters
            </button>
          </div>
        </form>

        {/* REPORT DATA VIEWS */}

        {/* 1. SALES REPORT */}
        {type === 'sales' && reportData?.summary && (
          <div className="space-y-4">
            <div className="grid grid-cols-2 sm:grid-cols-4 gap-4">
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Net Revenue</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.total_sales.toFixed(2)}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Invoices Count</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">{reportData.summary.total_bills}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">GST Tax Collected</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.total_tax.toFixed(2)}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Total Discounts</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.total_discount.toFixed(2)}</span>
              </div>
            </div>

            <div className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm overflow-hidden">
              <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">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">Tax</th>
                    <th className="p-4 text-right">Discount</th>
                    <th className="p-4 text-right">Grand Total</th>
                  </tr>
                </thead>
                <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60 font-medium">
                  {reportData.invoices?.data?.map((inv: any) => (
                    <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).toLocaleString()}</td>
                      <td className="p-4 font-semibold text-slate-900 dark:text-white">{inv.branch?.name}</td>
                      <td className="p-4 font-medium text-slate-700 dark:text-slate-300">{inv.cashier?.name}</td>
                      <td className="p-4 text-right text-slate-600 dark:text-slate-400">₹{Number(inv.tax_amount).toFixed(2)}</td>
                      <td className="p-4 text-right text-slate-600 dark:text-slate-400">₹{Number(inv.discount_amount).toFixed(2)}</td>
                      <td className="p-4 text-right font-bold text-slate-900 dark:text-white">₹{Number(inv.grand_total).toFixed(2)}</td>
                    </tr>
                  ))}
                </tbody>
              </table>
            </div>
          </div>
        )}

        {/* 2. PAYMENTS REPORT */}
        {type === 'payments' && reportData?.summary && (
          <div className="space-y-4">
            <div className="grid grid-cols-2 sm:grid-cols-4 gap-4">
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Cash Collection</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.cash.toFixed(2)}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">UPI Collection</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.upi.toFixed(2)}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Card Collection</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.card.toFixed(2)}</span>
              </div>
              <div className="bg-white dark:bg-slate-900 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm">
                <span className="block text-[11px] uppercase  font-semibold text-slate-400 dark:text-slate-500">Total Payments</span>
                <span className="text-2xl font-bold text-slate-900 dark:text-white block mt-1">₹{reportData.summary.total.toFixed(2)}</span>
              </div>
            </div>
          </div>
        )}

        {/* 3. PRODUCT SALES REPORT */}
        {type === 'products' && reportData?.products && (
          <div className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm overflow-hidden">
            <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">Product Name</th>
                  <th className="p-4">SKU</th>
                  <th className="p-4 text-center">Qty Sold</th>
                  <th className="p-4 text-right">Avg Unit Price</th>
                  <th className="p-4 text-right">Total Revenue</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-100 dark:divide-slate-800/60 font-medium">
                {reportData.products.data?.map((p: any, idx: number) => (
                  <tr key={idx} 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">{p.product_name_snapshot}</td>
                    <td className="p-4  font-bold text-slate-900 dark:text-white">{p.sku_snapshot}</td>
                    <td className="p-4 text-center font-bold text-slate-900 dark:text-white">{p.total_quantity}</td>
                    <td className="p-4 text-right text-slate-600 dark:text-slate-400">₹{Number(p.avg_unit_price).toFixed(2)}</td>
                    <td className="p-4 text-right font-bold text-slate-900 dark:text-white">₹{Number(p.total_revenue).toFixed(2)}</td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        )}
      </div>
    </AuthenticatedLayout>
  );
}

