import React, { useState, useEffect } from 'react';
import { Head, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { DailyClosing } from '@/types';
import { Clock, AlertTriangle, CheckCircle, Banknote, QrCode, CreditCard } from '@/Components/AnimatedIcons';

interface Props {
  existingClosing: DailyClosing | null;
  closingDate: string;
  summary: {
    total_bills: number;
    cash_sales: number;
    upi_sales: number;
    card_sales: number;
    discounts: number;
    voided_bills: number;
    expected_cash: number;
  };
}

export default function DailyClosingCreate({ existingClosing, closingDate, summary }: Props) {
  const [actualCash, setActualCash] = useState<number>(summary.expected_cash);
  const [reason, setReason] = useState('');
  const [errorMsg, setErrorMsg] = useState('');
  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 variance = Math.round((actualCash - summary.expected_cash) * 100) / 100;

  const handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    if (variance !== 0 && !reason.trim()) {
      setErrorMsg(`Cash variance of ₹${variance} detected. Reason is required.`);
      return;
    }

    router.post(route('daily-closing.store'), {
      closing_date: closingDate,
      actual_cash: actualCash,
      reason: reason,
    });
  };

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

      <div className="max-w-2xl mx-auto space-y-6">
        <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>Submit Daily Cashier Closing</span>
          </h1>
          <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
            Tally physical drawer cash for business date: <strong className="text-slate-900 dark:text-white">{closingDate}</strong>
          </p>
        </div>

        {existingClosing ? (
          <div className="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 p-8 rounded-2xl text-center space-y-3 shadow-sm">
            <CheckCircle className={`w-12 h-12 ${accentText} mx-auto`} />
            <h3 className="font-bold text-slate-900 dark:text-white text-lg">Closing Already Submitted</h3>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium">
              Daily closing for {closingDate} was already submitted for this branch with status: <strong className="text-slate-900 dark:text-white">{existingClosing.status}</strong>.
            </p>
          </div>
        ) : (
          <form onSubmit={handleSubmit} className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 shadow-sm p-6 space-y-6">
            {errorMsg && (
              <div className="p-3 bg-rose-500/10 border border-rose-500/20 text-rose-600 dark:text-rose-400 text-xs font-semibold rounded-xl flex items-center space-x-2">
                <AlertTriangle className="w-4 h-4 flex-shrink-0" />
                <span>{errorMsg}</span>
              </div>
            )}

            {/* System Calculated Tally */}
            <div className="space-y-3">
              <h3 className="text-xs  font-semibold uppercase tracking-wider text-slate-400 dark:text-slate-500">
                1. System Calculated Sales Summary
              </h3>

              <div className="grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs">
                <div className="p-3 bg-slate-50 dark:bg-slate-950 rounded-xl border border-slate-200 dark:border-slate-800">
                  <span className="block text-[11px] text-slate-400 dark:text-slate-500  font-semibold uppercase">Confirmed Bills</span>
                  <span className="text-base font-bold text-slate-900 dark:text-white mt-1 block">{summary.total_bills}</span>
                </div>

                <div className="p-3 bg-slate-50 dark:bg-slate-950 rounded-xl border border-slate-200 dark:border-slate-800">
                  <span className="block text-[11px] text-slate-400 dark:text-slate-500  font-semibold uppercase flex items-center space-x-1">
                    <Banknote className="w-3 h-3" />
                    <span>Cash</span>
                  </span>
                  <span className="text-base font-bold text-slate-900 dark:text-white mt-1 block">₹{summary.cash_sales.toFixed(2)}</span>
                </div>

                <div className="p-3 bg-slate-50 dark:bg-slate-950 rounded-xl border border-slate-200 dark:border-slate-800">
                  <span className="block text-[11px] text-slate-400 dark:text-slate-500  font-semibold uppercase flex items-center space-x-1">
                    <QrCode className="w-3 h-3" />
                    <span>UPI</span>
                  </span>
                  <span className="text-base font-bold text-slate-900 dark:text-white mt-1 block">₹{summary.upi_sales.toFixed(2)}</span>
                </div>

                <div className="p-3 bg-slate-50 dark:bg-slate-950 rounded-xl border border-slate-200 dark:border-slate-800">
                  <span className="block text-[11px] text-slate-400 dark:text-slate-500  font-semibold uppercase flex items-center space-x-1">
                    <CreditCard className="w-3 h-3" />
                    <span>Card</span>
                  </span>
                  <span className="text-base font-bold text-slate-900 dark:text-white mt-1 block">₹{summary.card_sales.toFixed(2)}</span>
                </div>
              </div>
            </div>

            {/* Actual Drawer Cash Input */}
            <div className="space-y-3 pt-4 border-t border-slate-100 dark:border-slate-800">
              <h3 className="text-xs  font-semibold uppercase tracking-wider text-slate-400 dark:text-slate-500">
                2. Physical Cash Drawer Count
              </h3>

              <div className="p-4 bg-slate-50 dark:bg-slate-950 rounded-2xl border border-slate-200 dark:border-slate-800 space-y-4">
                <div className="flex justify-between items-center text-xs font-semibold text-slate-700 dark:text-slate-300">
                  <span>Expected System Cash:</span>
                  <span className="text-base font-bold text-slate-900 dark:text-white">₹{summary.expected_cash.toFixed(2)}</span>
                </div>

                <div className="flex justify-between items-center">
                  <label className="text-xs font-semibold text-slate-900 dark:text-white">Actual Cash in Drawer:</label>
                  <input
                    type="number"
                    step="0.01"
                    value={actualCash}
                    onChange={(e) => setActualCash(parseFloat(e.target.value) || 0)}
                    className="w-36 p-2 text-right text-base font-bold border border-slate-200 dark:border-slate-800 dark:bg-slate-900 rounded-xl text-slate-900 dark:text-white focus:outline-none"
                    required
                  />
                </div>

                <div className="flex justify-between items-center pt-2 border-t border-slate-200 dark:border-slate-800 text-xs font-semibold">
                  <span>Cash Discrepancy / Variance:</span>
                  <span className={`text-base  font-bold ${variance === 0 ? 'text-emerald-600 dark:text-emerald-400' : 'text-rose-600 dark:text-rose-400'}`}>
                    ₹{variance.toFixed(2)}
                  </span>
                </div>
              </div>

              {variance !== 0 && (
                <div>
                  <label className="block text-xs font-semibold text-slate-700 dark:text-slate-300 mb-1">
                    Variance Reason / Explanation (Required for discrepancy)
                  </label>
                  <textarea
                    value={reason}
                    onChange={(e) => setReason(e.target.value)}
                    placeholder="Explain why actual drawer cash differs from system expected..."
                    className="w-full p-3 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"
                    rows={3}
                    required
                  />
                </div>
              )}
            </div>

            <button
              type="submit"
              className={`w-full py-3.5 ${accentBg} text-white font-semibold text-sm rounded-xl shadow-md transition-all`}
            >
              SUBMIT DAILY CLOSING TALLY
            </button>
          </form>
        )}
      </div>
    </AuthenticatedLayout>
  );
}

