import React, { useState, useEffect } from 'react';
import { Head, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Settings, Save } from '@/Components/AnimatedIcons';

interface Props {
  settings: {
    business_name: string;
    business_address: string;
    business_phone: string;
    business_email: string;
    gst_number: string;
    gst_enabled: boolean;
    gst_percentage: string;
    invoice_prefix: string;
    invoice_footer: string;
    default_tax_rate: string;
    cashier_discount_limit: string;
    business_logo?: string;
  };
}

export default function SettingsIndex({ settings }: Props) {
  const [form, setForm] = useState<any>(settings);
  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 handleSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    router.post(route('admin.settings.update'), form, { forceFormData: true });
  };

  return (
    <AuthenticatedLayout>
      <Head title="Business Settings - Cakes & Candles" />

      <div className="max-w-3xl 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">
            <Settings className={`w-7 h-7 ${accentText}`} />
            <span>Business & GST Invoice Settings</span>
          </h1>
          <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
            Configure bakery legal information, GST numbers, receipt footers, and cashier discount limits
          </p>
        </div>

        <form onSubmit={handleSubmit} className="bg-white dark:bg-slate-900 rounded-2xl border border-slate-200 dark:border-slate-800 p-6 shadow-2xl space-y-5 text-xs font-medium max-w-4xl mx-auto">
          <div className="mb-4">
            <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Business Logo</label>
            <div className="flex items-center space-x-4">
              {settings.business_logo && typeof form.business_logo === 'string' && (
                <img src={`/storage/${settings.business_logo}`} alt="Logo" className="h-12 w-12 object-contain bg-slate-100 rounded-lg p-1 border border-slate-200 dark:border-slate-700" />
              )}
              <input
                type="file"
                accept="image/*"
                onChange={(e) => {
                  if (e.target.files && e.target.files[0]) {
                    setForm({ ...form, business_logo: e.target.files[0] });
                  }
                }}
                className="w-full p-2 border border-slate-200 dark:border-slate-800 dark:bg-slate-950 rounded-xl text-slate-900 dark:text-white focus:outline-none file:mr-4 file:py-1 file:px-3 file:rounded-full file:border-0 file:text-xs file:font-semibold file:bg-[#FF0D8F] file:text-white hover:file:bg-[#d90978] cursor-pointer"
              />
            </div>
            <p className="text-[10px] text-slate-500 mt-1">Recommended size: 200x200px or similar square ratio (PNG/JPG).</p>
          </div>

          <div className="grid grid-cols-1 sm:grid-cols-2 gap-4 pt-4 border-t border-slate-100 dark:border-slate-800">
            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Business Name</label>
              <input
                type="text"
                value={form.business_name}
                onChange={(e) => setForm({ ...form, business_name: e.target.value })}
                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"
                required
              />
            </div>

            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">GST Registration Number</label>
              <input
                type="text"
                value={form.gst_number}
                onChange={(e) => setForm({ ...form, gst_number: e.target.value })}
                className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white uppercase focus:outline-none"
              />
            </div>

            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Business Phone</label>
              <input
                type="text"
                value={form.business_phone}
                onChange={(e) => setForm({ ...form, business_phone: e.target.value })}
                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"
              />
            </div>

            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Business Email</label>
              <input
                type="email"
                value={form.business_email}
                onChange={(e) => setForm({ ...form, business_email: e.target.value })}
                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"
              />
            </div>
          </div>

          <div>
            <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Main Store Address</label>
            <input
              type="text"
              value={form.business_address}
              onChange={(e) => setForm({ ...form, business_address: e.target.value })}
              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"
            />
          </div>

          <div className="grid grid-cols-1 sm:grid-cols-3 gap-4 pt-3 border-t border-slate-100 dark:border-slate-800">
            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Invoice Number Prefix</label>
              <input
                type="text"
                value={form.invoice_prefix}
                onChange={(e) => setForm({ ...form, invoice_prefix: e.target.value })}
                className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white uppercase focus:outline-none"
                required
              />
            </div>

            <div>
              <div className="flex items-center justify-between mb-1">
                <label className="block text-slate-700 dark:text-slate-300 font-semibold">GST Rate %</label>
                <label className="flex items-center space-x-1.5 cursor-pointer">
                  <input
                    type="checkbox"
                    checked={form.gst_enabled}
                    onChange={(e) => setForm({ ...form, gst_enabled: e.target.checked })}
                    className="w-3.5 h-3.5 rounded text-[#FF0D8F] focus:ring-[#FF0D8F] border-slate-300"
                  />
                  <span className="text-[10px] uppercase font-bold text-slate-500 dark:text-slate-400">Enable</span>
                </label>
              </div>
              <input
                type="number"
                step="0.01"
                value={form.gst_percentage}
                onChange={(e) => setForm({ ...form, gst_percentage: e.target.value })}
                disabled={!form.gst_enabled}
                className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white focus:outline-none disabled:opacity-50"
                required={form.gst_enabled}
              />
            </div>

            <div>
              <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Cashier Max Discount %</label>
              <input
                type="number"
                step="0.01"
                value={form.cashier_discount_limit}
                onChange={(e) => setForm({ ...form, cashier_discount_limit: e.target.value })}
                className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs font-bold text-slate-900 dark:text-white focus:outline-none"
                required
              />
            </div>
          </div>

          <div>
            <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Print Receipt Footer Message</label>
            <textarea
              value={form.invoice_footer}
              onChange={(e) => setForm({ ...form, invoice_footer: e.target.value })}
              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={2}
            />
          </div>

          <button
            type="submit"
            className={`w-full py-3 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-md transition-all flex items-center justify-center space-x-2`}
          >
            <Save className="w-4 h-4" />
            <span>SAVE BUSINESS SETTINGS</span>
          </button>
        </form>
      </div>
    </AuthenticatedLayout>
  );
}

