"use client";

import Image from "next/image";
import { useEffect, useRef, useState } from "react";
import { useRouter } from "next/navigation";
import { SiteShell, PageBand } from "@/components/SiteShell";

const API = process.env.NEXT_PUBLIC_API_URL || "http://localhost:5000/api";

type Tab = "verify" | "list" ;
type Person = {
  id: number;
  name: string;
  mobile: string;
  email: string;
  address: string;
  state: string;
  city: string;
  pincode: string;
  dob: string;
  gender: string;
  blood_group: string;
  profile_img?: string;
};

const tabMeta: Record<Tab, { icon: string; desc: string }> = {
  verify: {
    icon: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z",
    desc: "Look up your existing record",
  },
  list: {
    icon: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z",
    desc: "Browse all registered people",
  },

};

export function MembershipTabs({ type }: { type: "member" | "volunteer" }) {
  const router = useRouter();
  const [tab, setTab] = useState<Tab>("list");
  const [people, setPeople] = useState<Person[]>([]);
  const [loading, setLoading] = useState(true);
  const [formState, setFormState] = useState<"idle" | "loading" | "success" | "error">("idle");
  const [verifyId, setVerifyId] = useState("");
  const [verifyDob, setVerifyDob] = useState("");
  const [verifyResult, setVerifyResult] = useState<Person | null>(null);
  const [verifyError, setVerifyError] = useState("");
  const [profileFile, setProfileFile] = useState<File | null>(null);
  const fileRef = useRef<HTMLInputElement>(null);

  const endpoint = type === "member" ? "members" : "volunteers";
  const label = type === "member" ? "Member" : "Volunteer";
  const labelPlural = type === "member" ? "Members" : "Volunteers";
  const accentColor = type === "member" ? "var(--brand-primary)" : "var(--brand-secondary)";

  useEffect(() => {
    fetch(`${API}/${endpoint}`)
      .then((r) => r.json())
      .then((data) => setPeople(Array.isArray(data) ? data : []))
      .catch(() => undefined)
      .finally(() => setLoading(false));
  }, [endpoint]);

  const tabs: { key: Tab; label: string }[] = [
    { key: "verify", label: `Verify ${label}` },
    { key: "list", label: `Our ${labelPlural}` },
  ];

  return (
    <SiteShell>
      {/* ── Hero (white canvas) ── */}
      <section className="border-b border-[var(--color-hairline-cool)] bg-white">
        <div className="mx-auto max-w-[1280px] px-4 py-16 md:py-20 lg:px-6">
          <span className="eyebrow">
            <span className="eyebrow-dot" />
            {label} Portal
          </span>
          <h1 className="mt-5 text-4xl leading-[1.1] tracking-[-0.03em] text-[var(--color-ink)] md:text-6xl" style={{ fontWeight: 500 }}>
            {label}{" "}
            {type === "member" ? "Membership" : "Program"}
          </h1>
          <p className="mt-4 max-w-xl text-lg leading-7 text-[var(--color-ink-mute)]">
            Verify your details, browse the community, or submit a new application — all in one place.
          </p>
        </div>
      </section>

      <PageBand>
        <div className="flex flex-col gap-8 lg:flex-row lg:gap-12">
          {/* ── Sidebar ── */}
          <aside className="lg:w-56 lg:shrink-0">
            <nav className="flex gap-2 pb-2 flex-row flex-wrap lg:flex-col lg:gap-1 lg:pb-0 lg:sticky lg:top-28">
              {tabs.map(({ key, label: tabLabel }) => {
                const active = tab === key;
                return (
                  <button
                    key={key}
                    onClick={() => setTab(key)}
                    className={`flex min-w-0 flex-1 flex-col items-center gap-2 rounded-[6px] px-3 py-2 text-center transition-colors sm:flex-row sm:px-4 sm:py-3 sm:text-left lg:flex-none ${
                      active
                        ? "border border-[var(--color-ink)] bg-[var(--color-ink)] text-[var(--color-on-dark)]"
                        : "border border-[var(--color-hairline-cool)] bg-white text-[var(--color-ink-mute)] hover:border-[var(--color-ink)]"
                    }`}
                  >
                    <span
                      className="flex h-9 w-9 shrink-0 items-center justify-center rounded-[6px]"
                      style={{
                        background: active ? "var(--color-primary)" : "var(--color-canvas-soft)",
                        color: active ? "var(--color-on-primary)" : "var(--color-ink-mute-2)",
                      }}
                    >
                      <svg width="16" height="16" fill="none" stroke="currentColor" strokeWidth="1.8" viewBox="0 0 24 24">
                        <path d={tabMeta[key].icon} />
                      </svg>
                    </span>
                    <span className="w-full leading-tight">
                      <span className="block text-xs font-medium uppercase tracking-wider">{tabLabel}</span>
                      <span className="mt-0.5 hidden text-[11px] opacity-60 sm:block">{tabMeta[key].desc}</span>
                    </span>
                  </button>
                );
              })}
            </nav>
          </aside>

          {/* ── Content ── */}
          <div className="min-w-0 mt-4 flex-1 lg:mt-0">
            {/* ── Verify ── */}
            {tab === "verify" && (
              <div className="mx-auto max-w-lg">
                <div className="overflow-hidden rounded-[12px] border border-[var(--color-hairline)] bg-white">
                  <div className="p-7">
                    <h2 className="text-2xl text-[var(--color-ink)]" style={{ fontWeight: 500 }}>Verify {label}</h2>
                    <p className="mt-1.5 text-sm text-[var(--color-ink-mute)]">
                      Enter your ID and date of birth to look up your record.
                    </p>
                    <div className="mt-6 grid gap-4">
                      <input
                        value={verifyId}
                        onChange={(e) => setVerifyId(e.target.value)}
                        placeholder={`${label} ID`}
                        className="input"
                      />
                      <input
                        value={verifyDob}
                        onChange={(e) => setVerifyDob(e.target.value)}
                        type="date"
                        className="input"
                      />
                      <button
                        className="btn"
                        onClick={async () => {
                          setVerifyError("");
                          setVerifyResult(null);
                          try {
                            const res = await fetch(`${API}/${endpoint}/verify`, {
                              method: "POST",
                              headers: { "Content-Type": "application/json" },
                              body: JSON.stringify({ memberId: verifyId, dob: verifyDob }),
                            });
                            if (!res.ok) throw new Error("Not found");
                            setVerifyResult(await res.json());
                          } catch {
                            setVerifyError("No record found. Please check your ID and date of birth.");
                          }
                        }}
                      >
                        <svg width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2.5" viewBox="0 0 24 24">
                          <path d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
                        </svg>
                        Verify
                      </button>
                    </div>

                    {verifyResult && (
                      <div className="mt-6 overflow-hidden rounded-[6px] border border-[var(--color-primary)]/30 bg-[var(--color-primary)]/5">
                        <div className="flex items-center gap-3 border-b border-[var(--color-primary)]/20 px-4 py-3">
                          <div className="flex h-10 w-10 items-center justify-center rounded-full bg-[var(--color-primary)]/15">
                            <svg width="18" height="18" fill="none" stroke="var(--color-primary-deep)" strokeWidth="2.5" viewBox="0 0 24 24">
                              <path d="M9 12l2 2 4-4" />
                            </svg>
                          </div>
                          <span className="text-sm font-medium text-[var(--color-primary-deep)]">Record Found</span>
                        </div>
                        <div className="grid gap-3 p-4 text-sm sm:grid-cols-2">
                          <div>
                            <p className="text-[11px] font-medium uppercase tracking-wider text-[var(--color-ink-mute-2)]">Name</p>
                            <p className="mt-0.5 font-medium text-[var(--color-ink)]">{verifyResult.name}</p>
                          </div>
                          <div>
                            <p className="text-[11px] font-medium uppercase tracking-wider text-[var(--color-ink-mute-2)]">Mobile</p>
                            <p className="mt-0.5 font-medium text-[var(--color-ink)]">{verifyResult.mobile}</p>
                          </div>
                          <div>
                            <p className="text-[11px] font-medium uppercase tracking-wider text-[var(--color-ink-mute-2)]">Email</p>
                            <p className="mt-0.5 font-medium text-[var(--color-ink)]">{verifyResult.email}</p>
                          </div>
                          <div>
                            <p className="text-[11px] font-medium uppercase tracking-wider text-[var(--color-ink-mute-2)]">Location</p>
                            <p className="mt-0.5 font-medium text-[var(--color-ink)]">{verifyResult.city}, {verifyResult.state}</p>
                          </div>
                        </div>
                      </div>
                    )}
                    {verifyError && (
                      <div className="mt-4 flex items-center gap-2 rounded-md border border-[#e8a49a]/40 bg-[#fdece8] px-4 py-3 text-sm font-medium text-[#b5472e]">
                        <svg width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" viewBox="0 0 24 24">
                          <circle cx="12" cy="12" r="10" /><line x1="15" y1="9" x2="9" y2="15" /><line x1="9" y1="9" x2="15" y2="15" />
                        </svg>
                        {verifyError}
                      </div>
                    )}
                  </div>
                </div>
              </div>
            )}

            {/* ── List ── */}
            {tab === "list" && (
              <div>
                {people.length > 0 && (
                  <div className="mb-6 flex items-center gap-2 text-sm text-[var(--color-ink-mute)]">
                    <span className="flex h-7 w-7 items-center justify-center rounded-[6px] text-xs text-[var(--color-on-primary)]" style={{ background: accentColor }}>
                      {people.length}
                    </span>
                    {labelPlural} registered
                  </div>
                )}
                {loading ? (
                  <div className="flex items-center justify-center py-20">
                    <div className="flex items-center gap-3 text-sm text-[var(--color-ink-mute)]">
                      <svg className="h-5 w-5 animate-spin" fill="none" viewBox="0 0 24 24">
                        <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
                        <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" />
                      </svg>
                      Loading...
                    </div>
                  </div>
                ) : people.length === 0 ? (
                  <div className="flex flex-col items-center justify-center rounded-[12px] border-2 border-dashed border-[var(--color-hairline-strong)] py-20 text-center">
                    <div className="flex h-16 w-16 items-center justify-center rounded-full bg-[var(--color-canvas-soft)]">
                      <svg width="28" height="28" fill="none" stroke="var(--color-ink-mute-2)" strokeWidth="1.5" viewBox="0 0 24 24">
                        <path d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" />
                      </svg>
                    </div>
                    <p className="mt-4 text-[var(--color-ink-mute)]">No {labelPlural.toLowerCase()} yet</p>
                    <p className="mt-1 text-sm text-[var(--color-ink-mute-2)]">Applications will appear here once submitted.</p>
                  </div>
                ) : (
                  <div className="grid gap-5 sm:grid-cols-2 lg:grid-cols-3">
                    {people.map((p) => (
                      <div key={p.id} className="group rounded-[12px] border border-[var(--color-hairline)] bg-white transition-all hover:-translate-y-1 hover:shadow-[var(--shadow-l2)]">
                        <div className="p-6">
                          <div className="flex flex-col items-center text-center">
                            {p.profile_img ? (
                              <Image src={p.profile_img} alt="" width={72} height={72} className="rounded-full object-cover w-28 h-28" style={{ boxShadow: `0 0 0 2px ${accentColor}, 0 0 0 4px white` }} />
                            ) : (
                              <div className="flex h-[72px] w-[72px] items-center justify-center rounded-full text-xl text-[var(--color-on-primary)]" style={{ background: accentColor }}>
                                {p.name.charAt(0)}
                              </div>
                            )}
                            <h3 className="mt-4 text-lg text-[var(--color-ink)]" style={{ fontWeight: 500 }}>{p.name}</h3>
                            <div className="mt-4 grid w-full grid-cols-1 gap-2.5 text-left text-sm">
                              <div className="flex items-center gap-2 rounded-md bg-[var(--color-canvas-soft)] px-3 py-2">
                                <svg width="14" height="14" fill="none" stroke="var(--color-ink-mute-2)" strokeWidth="1.8" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 014.69 12 19.79 19.79 0 011.65 3.18 2 2 0 013.62 1h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L7.91 8.59a16 16 0 006 6l.94-.94a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" /></svg>
                                <span className="text-[var(--color-ink)]">{p.mobile}</span>
                              </div>
                              <div className="flex items-center gap-2 rounded-md bg-[var(--color-canvas-soft)] px-3 py-2">
                                <svg width="14" height="14" fill="none" stroke="var(--color-ink-mute-2)" strokeWidth="1.8" viewBox="0 0 24 24"><path d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" /></svg>
                                <span className="text-[var(--color-ink)]">{p.email || "—"}</span>
                              </div>
                              <div className="flex items-center gap-2 rounded-md bg-[var(--color-canvas-soft)] px-3 py-2">
                                <svg width="14" height="14" fill="none" stroke="var(--color-ink-mute-2)" strokeWidth="1.8" viewBox="0 0 24 24"><path d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" /><path d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" /></svg>
                                <span className="text-[var(--color-ink)]">{p.city}, {p.state}</span>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    ))}
                  </div>
                )}
              </div>
            )}

           
          </div>
        </div>
      </PageBand>
    </SiteShell>
  );
}
