import React, { useState, useEffect } from 'react';
import { Head, useForm, router } from '@inertiajs/react';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Building2, Plus, Phone, MapPin, ShieldCheck, Store, Cpu, X } from '@/Components/AnimatedIcons';

interface BranchItem {
  id: number;
  code: string;
  name: string;
  short_name: string | null;
  address: string | null;
  city: string | null;
  phone: string | null;
  email: string | null;
  gst_number: string | null;
  manager_name: string | null;
  manager_phone: string | null;
  is_active: boolean;
  users_count?: number;
  pos_terminals_count?: number;
  invoices_count?: number;
}

interface Props {
  branches: BranchItem[];
}

export default function Index({ branches }: Props) {
  const [showAddModal, setShowAddModal] = useState(false);
  const [showEditModal, setShowEditModal] = useState(false);
  const [selectedBranch, setSelectedBranch] = useState<BranchItem | null>(null);
  const [selectedBranchForTerminal, setSelectedBranchForTerminal] = useState<BranchItem | null>(null);
  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 { data, setData, post, put, processing, errors, reset } = useForm({
    name: '',
    code: '',
    short_name: '',
    address: '',
    city: '',
    phone: '',
    email: '',
    gst_number: '',
    manager_name: '',
    manager_phone: '',
  });

  const terminalForm = useForm({
    terminal_code: '',
    name: '',
  });

  const handleSubmitBranch = (e: React.FormEvent) => {
    e.preventDefault();
    post(route('admin.branches.store'), {
      onSuccess: () => {
        reset();
        setShowAddModal(false);
      }
    });
  };

  const handleEditBranchSubmit = (e: React.FormEvent) => {
    e.preventDefault();
    if (!selectedBranch) return;
    
    put(route('admin.branches.update', selectedBranch.id), {
      onSuccess: () => {
        reset();
        setShowEditModal(false);
        setSelectedBranch(null);
      }
    });
  };

  const openEditModal = (branch: BranchItem) => {
    setSelectedBranch(branch);
    setData({
      name: branch.name || '',
      code: branch.code || '',
      short_name: branch.short_name || '',
      address: branch.address || '',
      city: branch.city || '',
      phone: branch.phone || '',
      email: branch.email || '',
      gst_number: branch.gst_number || '',
      manager_name: branch.manager_name || '',
      manager_phone: branch.manager_phone || '',
    });
    setShowEditModal(true);
  };

  const handleToggleStatus = (branch: BranchItem) => {
    router.post(route('admin.branches.toggle', branch.id));
  };

  const handleAddTerminal = (e: React.FormEvent) => {
    e.preventDefault();
    if (!selectedBranchForTerminal) return;
    terminalForm.post(route('admin.branches.terminals.store', selectedBranchForTerminal.id), {
      onSuccess: () => {
        terminalForm.reset();
        setSelectedBranchForTerminal(null);
      }
    });
  };

  return (
    <AuthenticatedLayout>
      <Head title="Branches Master - Cakes & Candles" />

      <div className="space-y-6">
        {/* Page Header */}
        <div className="flex flex-col sm:flex-row sm: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">
              <Building2 className={`w-7 h-7 ${accentText}`} />
              <span>Multi-Branch Master Directory</span>
            </h1>
            <p className="text-xs text-slate-500 dark:text-slate-400 font-medium mt-1">
              Manage operational bakery branches, GST details, managers & POS terminals
            </p>
          </div>

          <button
            onClick={() => setShowAddModal(true)}
            className={`px-4 py-2.5 ${accentBg} text-white font-semibold text-xs rounded-xl shadow-md flex items-center space-x-2 transition-all`}
          >
            <Plus className="w-4 h-4" />
            <span>Create New Branch</span>
          </button>
        </div>

        {/* Branches Table */}
        <div className="bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl shadow-sm overflow-hidden">
          <div className="overflow-x-auto">
            <table className="w-full text-left text-sm">
              <thead className="bg-slate-50 dark:bg-slate-950/50 border-b border-slate-200 dark:border-slate-800 text-xs uppercase text-slate-500 dark:text-slate-400 font-semibold">
                <tr>
                  <th className="px-6 py-4">Branch Code</th>
                  <th className="px-6 py-4">Branch Details</th>
                  <th className="px-6 py-4">Manager & Contact</th>
                  <th className="px-6 py-4 text-center">Stats</th>
                  <th className="px-6 py-4 text-center">Status</th>
                  <th className="px-6 py-4 text-right">Actions</th>
                </tr>
              </thead>
              <tbody className="divide-y divide-slate-200 dark:divide-slate-800">
                {branches.length === 0 ? (
                  <tr>
                    <td colSpan={6} className="px-6 py-12 text-center text-slate-500">
                      <Store className="w-12 h-12 text-slate-300 dark:text-slate-700 mx-auto mb-3" />
                      <p className="font-semibold text-slate-900 dark:text-white">No Branches Found</p>
                      <p className="text-xs">Create your first branch to start selling.</p>
                    </td>
                  </tr>
                ) : (
                  branches.map((branch) => (
                    <tr key={branch.id} className="hover:bg-slate-50 dark:hover:bg-slate-800/50 transition-colors">
                      <td className="px-6 py-4 whitespace-nowrap">
                        <span className="px-2.5 py-1 bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-300  text-xs font-bold rounded-lg border border-slate-200 dark:border-slate-700">
                          {branch.code}
                        </span>
                      </td>
                      <td className="px-6 py-4">
                        <div className="flex items-center space-x-3">
                          <div className={`w-10 h-10 rounded-xl flex items-center justify-center shrink-0 ${branch.is_active ? 'bg-pink-50 dark:bg-pink-500/10 text-pink-600 dark:text-pink-400' : 'bg-slate-100 dark:bg-slate-800 text-slate-500'}`}>
                            <Store className="w-5 h-5" />
                          </div>
                          <div>
                            <p className="font-bold text-slate-900 dark:text-white leading-tight mb-0.5">{branch.name}</p>
                            <p className="text-[11px] text-slate-500 dark:text-slate-400 truncate max-w-xs">
                              {branch.address ? `${branch.address}${branch.city ? `, ${branch.city}` : ''}` : 'No address specified'}
                            </p>
                          </div>
                        </div>
                      </td>
                      <td className="px-6 py-4">
                        <div className="text-xs space-y-1">
                          {branch.manager_name ? (
                            <p className="flex items-center space-x-1.5 text-slate-700 dark:text-slate-300">
                              <ShieldCheck className="w-3.5 h-3.5 text-slate-400" />
                              <span className="font-semibold">{branch.manager_name}</span>
                            </p>
                          ) : (
                            <p className="text-slate-400 italic">No Manager</p>
                          )}
                          <p className="flex items-center space-x-1.5 text-slate-500 dark:text-slate-400">
                            <Phone className="w-3.5 h-3.5 text-slate-400" />
                            <span>{branch.phone || branch.manager_phone || 'No phone'}</span>
                          </p>
                        </div>
                      </td>
                      <td className="px-6 py-4">
                        <div className="flex items-center justify-center space-x-3 text-[10px] font-medium text-slate-500 dark:text-slate-400">
                          <div className="text-center" title="Staff Count">
                            <span className="block font-bold text-slate-900 dark:text-white text-xs">{branch.users_count || 0}</span>
                            Users
                          </div>
                          <div className="text-center" title="POS Terminals">
                            <span className="block font-bold text-slate-900 dark:text-white text-xs">{branch.pos_terminals_count || 0}</span>
                            POS
                          </div>
                          <div className="text-center" title="Total Invoices">
                            <span className="block font-bold text-slate-900 dark:text-white text-xs">{branch.invoices_count || 0}</span>
                            Inv.
                          </div>
                        </div>
                      </td>
                      <td className="px-6 py-4 text-center whitespace-nowrap">
                        <button
                          onClick={() => handleToggleStatus(branch)}
                          className={`px-3 py-1 text-[11px] font-bold rounded-full transition-colors border ${
                            branch.is_active 
                              ? 'bg-emerald-50 text-emerald-600 border-emerald-200 dark:bg-emerald-500/10 dark:text-emerald-400 dark:border-emerald-500/20 hover:bg-emerald-100 dark:hover:bg-emerald-500/20' 
                              : 'bg-slate-100 text-slate-500 border-slate-200 dark:bg-slate-500/10 dark:text-slate-400 dark:border-slate-500/20 hover:bg-slate-200 dark:hover:bg-slate-500/20'
                          }`}
                        >
                          {branch.is_active ? 'Active' : 'Inactive'}
                        </button>
                      </td>
                      <td className="px-6 py-4 whitespace-nowrap text-right">
                        <div className="flex items-center justify-end space-x-2">
                          <button
                            onClick={() => setSelectedBranchForTerminal(branch)}
                            className="p-1.5 text-emerald-600 dark:text-emerald-400 hover:bg-emerald-50 dark:hover:bg-emerald-500/10 rounded-lg transition-colors border border-transparent hover:border-emerald-200 dark:hover:border-emerald-500/20"
                            title="Add POS Terminal"
                          >
                            <Cpu className="w-4 h-4" />
                          </button>
                          <button
                            onClick={() => openEditModal(branch)}
                            className={`p-1.5 text-blue-600 dark:text-blue-400 hover:bg-blue-50 dark:hover:bg-blue-500/10 rounded-lg transition-colors border border-transparent hover:border-blue-200 dark:hover:border-blue-500/20`}
                            title="Edit Branch"
                          >
                            <span className="text-xs font-bold px-1">Edit</span>
                          </button>
                        </div>
                      </td>
                    </tr>
                  ))
                )}
              </tbody>
            </table>
          </div>
        </div>
      </div>

      {/* CREATE BRANCH MODAL */}
      {showAddModal && (
        <div className="fixed inset-0 z-50 bg-slate-950/60 backdrop-blur-sm flex items-center justify-center p-4">
          <div className="bg-white dark:bg-slate-900 rounded-2xl max-w-lg w-full p-6 space-y-5 shadow-2xl border border-slate-200 dark:border-slate-800">
            <div className="flex justify-between items-center border-b border-slate-200 dark:border-slate-800 pb-3">
              <h3 className="font-bold text-base text-slate-900 dark:text-white">Create New Bakery Branch</h3>
              <button onClick={() => setShowAddModal(false)} className="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200">
                <X className="w-5 h-5" />
              </button>
            </div>

            <form onSubmit={handleSubmitBranch} className="space-y-3.5 text-xs font-medium">
              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Branch Code *</label>
                  <input
                    type="text"
                    required
                    placeholder="e.g. BR003"
                    value={data.code}
                    onChange={(e) => setData('code', 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"
                  />
                  {errors.code && <span className="text-rose-600 text-[10px]">{errors.code}</span>}
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Branch Name *</label>
                  <input
                    type="text"
                    required
                    placeholder="e.g. Cakes & Candles Erode"
                    value={data.name}
                    onChange={(e) => setData('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"
                  />
                  {errors.name && <span className="text-rose-600 text-[10px]">{errors.name}</span>}
                </div>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Address</label>
                <input
                  type="text"
                  placeholder="Street address line"
                  value={data.address}
                  onChange={(e) => setData('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 text-slate-900 dark:text-white focus:outline-none"
                />
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">City</label>
                  <input
                    type="text"
                    placeholder="e.g. Erode"
                    value={data.city}
                    onChange={(e) => setData('city', 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 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">Phone</label>
                  <input
                    type="text"
                    placeholder="+91 9876543210"
                    value={data.phone}
                    onChange={(e) => setData('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 text-slate-900 dark:text-white focus:outline-none"
                  />
                </div>
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Manager Name</label>
                  <input
                    type="text"
                    placeholder="Branch Manager Name"
                    value={data.manager_name}
                    onChange={(e) => setData('manager_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 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">GST Number</label>
                  <input
                    type="text"
                    placeholder="Branch GSTIN"
                    value={data.gst_number}
                    onChange={(e) => setData('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 text-slate-900 dark:text-white focus:outline-none"
                  />
                </div>
              </div>

              <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
                <button
                  type="button"
                  onClick={() => setShowAddModal(false)}
                  className="px-4 py-2.5 bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 rounded-xl text-slate-700 dark:text-slate-300 font-semibold transition-colors"
                >
                  Cancel
                </button>
                <button
                  type="submit"
                  disabled={processing}
                  className={`px-5 py-2.5 ${accentBg} text-white font-semibold rounded-xl shadow-md transition-all`}
                >
                  Create Branch
                </button>
              </div>
            </form>
          </div>
        </div>
      )}

      {/* EDIT BRANCH MODAL */}
      {showEditModal && (
        <div className="fixed inset-0 z-50 bg-slate-950/60 backdrop-blur-sm flex items-center justify-center p-4">
          <div className="bg-white dark:bg-slate-900 rounded-2xl max-w-lg w-full p-6 space-y-5 shadow-2xl border border-slate-200 dark:border-slate-800">
            <div className="flex justify-between items-center border-b border-slate-200 dark:border-slate-800 pb-3">
              <h3 className="font-bold text-base text-slate-900 dark:text-white">Edit Branch</h3>
              <button onClick={() => { setShowEditModal(false); reset(); setSelectedBranch(null); }} className="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200">
                <X className="w-5 h-5" />
              </button>
            </div>

            <form onSubmit={handleEditBranchSubmit} className="space-y-3.5 text-xs font-medium">
              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Branch Code *</label>
                  <input
                    type="text"
                    required
                    placeholder="e.g. BR003"
                    value={data.code}
                    onChange={(e) => setData('code', 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"
                  />
                  {errors.code && <span className="text-rose-600 text-[10px]">{errors.code}</span>}
                </div>

                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Branch Name *</label>
                  <input
                    type="text"
                    required
                    placeholder="e.g. Cakes & Candles Erode"
                    value={data.name}
                    onChange={(e) => setData('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"
                  />
                  {errors.name && <span className="text-rose-600 text-[10px]">{errors.name}</span>}
                </div>
              </div>

              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Address</label>
                <textarea
                  placeholder="Street address line"
                  value={data.address}
                  onChange={(e) => setData('address', e.target.value)}
                  rows={3}
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 text-xs text-slate-900 dark:text-white focus:outline-none"
                />
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">City</label>
                  <input
                    type="text"
                    placeholder="e.g. Erode"
                    value={data.city}
                    onChange={(e) => setData('city', 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 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">Phone</label>
                  <input
                    type="text"
                    placeholder="+91 9876543210"
                    value={data.phone}
                    onChange={(e) => setData('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 text-slate-900 dark:text-white focus:outline-none"
                  />
                </div>
              </div>

              <div className="grid grid-cols-2 gap-3">
                <div>
                  <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Manager Name</label>
                  <input
                    type="text"
                    placeholder="Branch Manager Name"
                    value={data.manager_name}
                    onChange={(e) => setData('manager_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 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">GST Number</label>
                  <input
                    type="text"
                    placeholder="Branch GSTIN"
                    value={data.gst_number}
                    onChange={(e) => setData('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 text-slate-900 dark:text-white focus:outline-none"
                  />
                </div>
              </div>

              <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
                <button
                  type="button"
                  onClick={() => { setShowEditModal(false); reset(); setSelectedBranch(null); }}
                  className="px-4 py-2.5 bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 rounded-xl text-slate-700 dark:text-slate-300 font-semibold transition-colors"
                >
                  Cancel
                </button>
                <button
                  type="submit"
                  disabled={processing}
                  className={`px-5 py-2.5 ${accentBg} text-white font-semibold rounded-xl shadow-md transition-all`}
                >
                  Save Changes
                </button>
              </div>
            </form>
          </div>
        </div>
      )}

      {/* ADD POS TERMINAL MODAL */}
      {selectedBranchForTerminal && (
        <div className="fixed inset-0 z-50 bg-slate-950/60 backdrop-blur-sm flex items-center justify-center p-4">
          <div className="bg-white dark:bg-slate-900 rounded-2xl max-w-md w-full p-6 space-y-4 shadow-2xl border border-slate-200 dark:border-slate-800">
            <div className="flex justify-between items-center border-b border-slate-200 dark:border-slate-800 pb-3">
              <h3 className="font-bold text-base text-slate-900 dark:text-white">
                Add POS Terminal: {selectedBranchForTerminal.name}
              </h3>
              <button onClick={() => setSelectedBranchForTerminal(null)} className="text-slate-400 hover:text-slate-600 dark:hover:text-slate-200">
                <X className="w-5 h-5" />
              </button>
            </div>

            <form onSubmit={handleAddTerminal} className="space-y-3.5 text-xs font-medium">
              <div>
                <label className="block text-slate-700 dark:text-slate-300 font-semibold mb-1">Terminal Code *</label>
                <input
                  type="text"
                  required
                  placeholder="e.g. POS-SLM-02"
                  value={terminalForm.data.terminal_code}
                  onChange={(e) => terminalForm.setData('terminal_code', e.target.value)}
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5  font-bold 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">Terminal Name *</label>
                <input
                  type="text"
                  required
                  placeholder="e.g. Counter 2 POS"
                  value={terminalForm.data.name}
                  onChange={(e) => terminalForm.setData('name', e.target.value)}
                  className="w-full rounded-xl border border-slate-200 dark:border-slate-800 dark:bg-slate-950 p-2.5 font-semibold text-slate-900 dark:text-white focus:outline-none"
                />
              </div>

              <div className="pt-3 border-t border-slate-200 dark:border-slate-800 flex justify-end space-x-3">
                <button
                  type="button"
                  onClick={() => setSelectedBranchForTerminal(null)}
                  className="px-4 py-2.5 bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 rounded-xl text-slate-700 dark:text-slate-300 font-semibold transition-colors"
                >
                  Cancel
                </button>
                <button
                  type="submit"
                  disabled={terminalForm.processing}
                  className={`px-4 py-2.5 ${accentBg} text-white font-semibold rounded-xl shadow-md transition-all`}
                >
                  Add Terminal
                </button>
              </div>
            </form>
          </div>
        </div>
      )}
    </AuthenticatedLayout>
  );
}

