import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout";
import { Head, Link, useForm } from "@inertiajs/react";

export default function Edit({ user, mode, all_roles }) {
  const isCreate = mode === "create";
  const initialRoleIds = user?.role_ids || [];

  const { data, setData, post, put, processing, errors } = useForm({
    name: user?.name || "",
    email: user?.email || "",
    roles: initialRoleIds,
    send_invite: true,
  });

  const toggleRole = (id) => {
    if (data.roles.includes(id)) setData("roles", data.roles.filter((x) => x !== id));
    else setData("roles", [...data.roles, id]);
  };

  const submit = (e) => {
    e.preventDefault();
    if (isCreate) post(route("users.store"));
    else put(route("users.update", user.id));
  };

  const input = "w-full rounded-md border-gray-300 text-base focus:border-[#26348C] focus:ring-1 focus:ring-[#26348C]/30 min-h-[44px]";

  return (
    <AuthenticatedLayout header={
      <div className="flex items-center justify-between">
        <h2 className="text-lg sm:text-xl font-semibold text-[#26348C]">{isCreate ? "Invite Member" : `Edit · ${user.name}`}</h2>
        <Link href={route("users.index")} className="px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 rounded-md min-h-[40px] inline-flex items-center">Cancel</Link>
      </div>
    }>
      <Head title={isCreate ? "Invite Member" : `Edit ${user.name}`} />
      <div className="py-6 sm:py-8">
        <form onSubmit={submit} className="mx-auto max-w-3xl space-y-5 sm:space-y-6 px-4 sm:px-6 lg:px-8">

          <div className="bg-white border border-gray-200 rounded-xl">
            <div className="px-5 py-4 border-b border-gray-200">
              <h3 className="text-base font-semibold text-[#26348C]">Identity</h3>
            </div>
            <div className="p-5 space-y-5">
              <div>
                <label className="block text-[11px] font-bold uppercase tracking-wider text-gray-600 mb-1.5">Full name *</label>
                <input type="text" value={data.name} onChange={(e) => setData("name", e.target.value)} className={input} placeholder="e.g. Karan Patel" required />
                {errors.name && <p className="text-xs text-[#C0392B] mt-1">{errors.name}</p>}
              </div>
              <div>
                <label className="block text-[11px] font-bold uppercase tracking-wider text-gray-600 mb-1.5">Email *</label>
                <input type="email" value={data.email} onChange={(e) => setData("email", e.target.value)} className={input} placeholder="karan@monocurepharma.com" required />
                {errors.email && <p className="text-xs text-[#C0392B] mt-1">{errors.email}</p>}
                <p className="text-[11px] text-gray-400 mt-1">Becomes their login.</p>
              </div>
            </div>
          </div>

          <div className="bg-white border border-gray-200 rounded-xl">
            <div className="px-5 py-4 border-b border-gray-200">
              <h3 className="text-base font-semibold text-[#26348C]">Roles · {data.roles.length} selected</h3>
              <p className="text-xs text-gray-500 mt-1">Tap to toggle. A user can hold multiple roles · permissions stack additively.</p>
            </div>
            <div className="p-5 space-y-2">
              {all_roles.map((r) => {
                const active = data.roles.includes(r.id);
                const isSuper = r.slug === "super_admin";
                return (
                  <button key={r.id} type="button" onClick={() => toggleRole(r.id)}
                    className={`w-full text-left rounded-md border-2 transition-colors p-4 min-h-[64px] ${
                      active
                        ? (isSuper ? "bg-[#1A2466] border-[#1A2466] text-white" : "bg-[#26348C] border-[#26348C] text-white")
                        : "bg-white border-gray-300 hover:border-[#26348C]"
                    }`}>
                    <div className="flex items-start gap-3">
                      <span className={`w-5 h-5 rounded border-2 flex-shrink-0 transition-all mt-0.5 ${active ? "border-white bg-white" : "border-gray-400"} flex items-center justify-center`}>
                        {active && <span className="text-[#26348C] text-xs font-bold">✓</span>}
                      </span>
                      <div className="flex-1 min-w-0">
                        <div className={`font-semibold ${active ? "text-white" : "text-[#26348C]"}`}>
                          {r.name}
                          {isSuper && <span className={`ml-2 text-[9px] uppercase tracking-widest px-2 py-0.5 rounded-full ${active ? "bg-[#F2B441] text-[#1A2466]" : "bg-[#F2B441] text-white"}`}>Sphyx</span>}
                        </div>
                        <div className={`text-xs mt-0.5 ${active ? "text-[#E8EBF7]" : "text-gray-500"}`}>{r.description || `Slug: ${r.slug}`}</div>
                      </div>
                    </div>
                  </button>
                );
              })}
            </div>
          </div>

          {isCreate && (
            <div className="bg-[#FFF4D6] border border-[#F2B441] rounded-xl p-5">
              <label className="flex items-start gap-3 cursor-pointer">
                <input type="checkbox" checked={data.send_invite} onChange={(e) => setData("send_invite", e.target.checked)}
                  className="mt-0.5 rounded text-[#26348C] focus:ring-[#26348C]" />
                <div className="flex-1">
                  <div className="text-sm font-semibold text-[#8a5e00]">Email the invite with login details</div>
                  <p className="text-xs text-gray-700 mt-1">A 18-character random password will be generated and emailed via sphyx-local sendmail. The user will see your name (the inviter) and is asked to change the password on first login.</p>
                </div>
              </label>
            </div>
          )}

          <div className="flex flex-col-reverse sm:flex-row gap-3 sm:justify-end">
            <Link href={route("users.index")} className="px-4 py-3 text-sm text-center text-gray-700 hover:bg-gray-100 rounded-md min-h-[48px] inline-flex items-center justify-center">Cancel</Link>
            <button type="submit" disabled={processing} className="bg-[#26348C] hover:bg-[#3A4BAD] disabled:opacity-50 text-white font-medium px-6 py-3 rounded-md text-sm min-h-[48px]">
              {processing ? "Saving..." : isCreate ? "Create + Send Invite" : "Save changes"}
            </button>
          </div>
        </form>
      </div>
    </AuthenticatedLayout>
  );
}
