import React, { useState, useEffect } from "react";
import { Property, Agent } from "../types";
import { formatIDR } from "../utils";
import { Bookmark, Compass, Search, FileSignature, Sparkles, MapPin, ExternalLink, RefreshCw } from "lucide-react";
import { translations } from "../translations";

interface Inquiry {
  id: number;
  name: string;
  email: string;
  phone: string;
  interest: string;
  agent: string;
  message: string;
  transactionId: string;
  created_at: string;
}

interface ClientPanelProps {
  lang: "en" | "id";
  onSelectProperty: (property: Property) => void;
}

export default function ClientPanel({ lang, onSelectProperty }: ClientPanelProps) {
  const isEn = lang === "en";
  const t = translations[lang];

  const [properties, setProperties] = useState<Property[]>([]);
  const [agents, setAgents] = useState<Agent[]>([]);
  const [savedIds, setSavedIds] = useState<string[]>([]);
  const [emailQuery, setEmailQuery] = useState("");
  const [matchingInquiries, setMatchingInquiries] = useState<Inquiry[]>([]);
  const [searchExecuted, setSearchExecuted] = useState(false);
  const [loading, setLoading] = useState(false);
  const [errorMsg, setErrorMsg] = useState("");

  // Hook localstorage and express queries
  useEffect(() => {
    // Read saved bookmarks
    try {
      const stored = localStorage.getItem("luniar_saved_bookmarks");
      if (stored) {
        setSavedIds(JSON.parse(stored));
      }
    } catch (e) {
      console.warn(e);
    }

    // Auto-fill logged-in client email query if session exists
    try {
      const session = localStorage.getItem("luniar_client_session");
      if (session) {
        const parsed = JSON.parse(session);
        if (parsed && parsed.email) {
          setEmailQuery(parsed.email);
        }
      }
    } catch (e) {
      console.warn(e);
    }

    // Retrieve active catalogs 
    const loadCatalog = async () => {
      try {
        const propsRes = await fetch("/api/properties");
        if (propsRes.ok) {
          const propsData = await propsRes.json();
          setProperties(propsData);
        }
        const agentsRes = await fetch("/api/agents");
        if (agentsRes.ok) {
          const agentsData = await agentsRes.json();
          setAgents(agentsData);
        }
      } catch (err) {
        console.error("Failed loading client catalog limits: ", err);
      }
    };
    loadCatalog();
  }, []);

  const handleSearchInquiries = async (e: React.FormEvent) => {
    e.preventDefault();
    const queryMail = emailQuery.trim();
    if (!queryMail) return;

    setLoading(true);
    setSearchExecuted(true);
    setErrorMsg("");
    try {
      // Find Token to headers
      let token = "";
      try {
        const session = localStorage.getItem("luniar_client_session");
        if (session) {
          const parsed = JSON.parse(session);
          token = parsed?.token || "";
        }
      } catch (e) {
        console.warn(e);
      }

      const res = await fetch(`/api/inquiries/search?email=${encodeURIComponent(queryMail)}`, {
        headers: {
          "Authorization": token ? `Bearer ${token}` : ""
        }
      });
      if (res.ok) {
        const inqs: Inquiry[] = await res.json();
        setMatchingInquiries(inqs);
      } else {
        const errObj = await res.json();
        setErrorMsg(errObj.error || (isEn ? "Access denied. Are you logged in correctly?" : "Akses ditolak. Apakah Anda masuk dengan kredensial yang benar?"));
        setMatchingInquiries([]);
      }
    } catch (err) {
      console.error(err);
      setErrorMsg(isEn ? "Connection severed. Is server working?" : "Sambungan terputus. Apakah server berfungsi dengan baik?");
    } finally {
      setLoading(false);
    }
  };

  const handleRemoveBookmark = (propertyId: string) => {
    const nextSaved = savedIds.filter((id) => id !== propertyId);
    setSavedIds(nextSaved);
    try {
      localStorage.setItem("luniar_saved_bookmarks", JSON.stringify(nextSaved));
    } catch (e) {
      console.error(e);
    }
  };

  // Find properties matched inside savedIds list
  const bookmarkedProperties = properties.filter((p) => savedIds.includes(p.id));

  // Translate agent representation
  const getLocalizedAgent = (agent: Agent) => {
    if (isEn) return agent;
    if (agent.id === "agent-alistair") {
      return {
        ...agent,
        role: "Penasihat Arsitektur Global",
        bio: "Dengan lebih dari lima belas tahun pengalaman di pasar arsitektur mewah, Alistair berspesialisasi dalam aset premium langka yang menunjukkan integritas struktural murni."
      };
    } else if (agent.id === "agent-clara") {
      return {
        ...agent,
        role: "Direktur Kurasi",
        bio: "Clara memiliki mata yang tanpa kompromi untuk estetika minimalis. Dia bekerja erat dengan kolektor internasional untuk mengkurasi rumah yang berfungsi sebagai patung hidup."
      };
    } else if (agent.id === "agent-hiroshi") {
      return {
        ...agent,
        role: "Akun Komersial & Privat",
        bio: "Spesialis dalam apartemen premium berkepadatan tinggi dan arsitektur komersial skulptural, Hiroshi menjembatani visi pembangunan dengan modal privat yang canggih."
      };
    }
    return agent;
  };

  return (
    <div className="bg-[#FDFCFB] min-h-[650px] py-10" id="client-panel-main">
      {/* Title Header */}
      <div className="space-y-3 mb-12 text-left" id="client-header-title">
        <span className="font-sans text-[10px] font-bold uppercase tracking-[0.25em] text-[#C5A572] block">
          {isEn ? "PRIVATE ACQUISITION MANAGEMENT" : "MANAJEMEN AKUISISI PRIVAT"}
        </span>
        <h2 className="font-serif text-3xl font-light tracking-tight text-[#1A1A1A]">
          {t.clientPortalTitle}
        </h2>
        <p className="font-sans text-xs text-zinc-500 font-light max-w-2xl leading-relaxed">
          {t.clientPortalSubtitle}
        </p>
      </div>

      <div className="grid grid-cols-1 lg:grid-cols-12 gap-12 text-left">
        {/* LEFT COLUMN: Bookmarked curations & advisors (8 columns) */}
        <div className="lg:col-span-8 space-y-12">
          {/* Sub block: Bookmarks */}
          <div className="space-y-6">
            <div className="flex items-center justify-between pb-3 border-b border-[#EEECE6]">
              <div className="flex items-center gap-2">
                <Bookmark className="w-4 h-4 text-[#C5A572]" />
                <h3 className="font-serif text-lg font-normal text-[#1A1A1A]">
                  {isEn ? "Curated Bookmarks" : "Markah Terkurasi Anda"}
                </h3>
              </div>
              <span className="font-sans text-[9px] uppercase tracking-wider text-zinc-400 font-semibold">
                {bookmarkedProperties.length} {isEn ? "bookmarked" : "ditandai"}
              </span>
            </div>

            {bookmarkedProperties.length === 0 ? (
              <div className="p-12 border border-dashed border-[#EEECE6] bg-[#F5F3EF]/20 text-center font-serif italic text-zinc-400 text-sm">
                {isEn 
                  ? "No properties curated under your bookmark storage yet. Browse Luniar portfolios to accumulate files."
                  : "Belum ada properti yang dikurasi di buku markah Anda. Telusuri portofolio Luniar untuk menambahkan daftar."}
              </div>
            ) : (
              <div className="grid grid-cols-1 md:grid-cols-2 gap-6" id="client-bookmarks-grid">
                {bookmarkedProperties.map((p) => (
                  <div key={p.id} className="border border-[#EEECE6] bg-white group hover:shadow-md transition-all duration-300 flex flex-col justify-between">
                    <div className="aspect-[16/10] w-full bg-[#F5F3EF] overflow-hidden relative">
                      <img src={p.heroImage} alt={p.title} className="w-full h-full object-cover group-hover:scale-102 transition-transform duration-700" />
                      <button
                        onClick={() => handleRemoveBookmark(p.id)}
                        className="absolute top-3 right-3 w-7 h-7 rounded-full bg-[#1A1A1A] hover:bg-[#C5A572] text-white flex items-center justify-center transition-colors shadow focus:outline-none cursor-pointer"
                        title={isEn ? "Remove bookmark" : "Hapus markah"}
                      >
                        ×
                      </button>
                    </div>

                    <div className="p-5 space-y-3">
                      <div>
                        <span className="font-sans text-[8px] uppercase tracking-[0.2em] text-[#C5A572] font-semibold">{p.location}</span>
                        <h4 className="font-serif text-base font-normal text-zinc-950 mt-1 truncate">{p.title}</h4>
                      </div>

                      <div className="flex justify-between items-center pt-2.5 border-t border-[#EEECE6]/60">
                        <span className="font-mono text-xs font-semibold text-[#C5A572]">{formatIDR(p.price)}</span>
                        <button
                          onClick={() => onSelectProperty(p)}
                          className="font-sans text-[9px] font-bold uppercase tracking-widest text-zinc-900 hover:text-[#C5A572] transition-colors flex items-center gap-1 cursor-pointer focus:outline-none"
                        >
                          {isEn ? "View Details" : "Lihat Rincian"} <ExternalLink size={10} />
                        </button>
                      </div>
                    </div>
                  </div>
                ))}
              </div>
            )}
          </div>

          {/* Sub block: Dedicated Officers */}
          <div className="space-y-6">
            <div className="pb-3 border-b border-[#EEECE6]">
              <h3 className="font-serif text-lg font-normal text-[#1A1A1A]">
                {isEn ? "Your Curatorial Cabinet" : "Kabinat Kurator Anda"}
              </h3>
            </div>

            <div className="grid grid-cols-1 md:grid-cols-3 gap-6" id="client-agents-cabinet-grid">
              {agents.map((rawAg) => {
                const ag = getLocalizedAgent(rawAg);
                return (
                  <div key={ag.id} className="border border-[#EEECE6] p-5 space-y-4 bg-[#F5F3EF]/30 flex flex-col justify-between">
                    <div className="space-y-3">
                      <img src={ag.image} alt={ag.name} className="w-12 h-12 rounded-full object-cover border border-[#EEECE6]" />
                      <div>
                        <h4 className="font-serif text-sm font-normal text-[#1A1A1A]">{ag.name}</h4>
                        <p className="font-sans text-[9px] text-[#C5A572] uppercase tracking-wider font-semibold mt-0.5">{ag.role}</p>
                      </div>
                      <p className="font-sans text-[11px] font-light text-zinc-500 leading-relaxed font-light">
                        {ag.bio}
                      </p>
                    </div>
                    <div className="pt-4 border-t border-zinc-200 text-[10px] font-mono space-y-1">
                      <span className="block text-zinc-400">{isEn ? "Direct lines:" : "Saluran langsung:"}</span>
                      <a href={`mailto:${ag.email}`} className="text-[#1A1A1A] hover:text-[#C5A572] hover:underline block truncate font-medium">{ag.email}</a>
                      <span className="text-zinc-600 block">{ag.phone}</span>
                    </div>
                  </div>
                );
              })}
            </div>
          </div>
        </div>

        {/* RIGHT COLUMN: Inquiry Search Lookup (4 columns) */}
        <div className="lg:col-span-4 bg-[#F5F3EF]/40 border border-[#EEECE6] p-6 md:p-8 self-start space-y-8 h-auto">
          <div>
            <span className="font-sans text-[8px] font-bold uppercase tracking-[0.2em] text-[#C5A572] block">
              {isEn ? "LEDGER LOOKUP" : "PENCARIAN ARSIP SAKTI"}
            </span>
            <h3 className="font-serif text-xl font-light tracking-tight text-[#1A1A1A] mt-1">
              {isEn ? "Acquisitions Search" : "Penyelidikan Akuisisi"}
            </h3>
            <p className="font-sans text-[11px] text-zinc-500 leading-relaxed mt-1 font-light">
              {isEn 
                ? "Enter your catalogued registration email address below to fetch active spatial inquiry ledgers directly from the database."
                : "Masukkan alamat email pendaftaran Anda di bawah untuk mengambil data pertanyaan spasial aktif langsung dari database."}
            </p>
          </div>

          <form onSubmit={handleSearchInquiries} className="space-y-4">
            <div className="space-y-1.5">
              <label className="font-sans text-[9px] font-bold uppercase tracking-wider text-zinc-400 block">
                {isEn ? "Registration Email" : "Email Pendaftaran"}
              </label>
              <div className="relative">
                <input
                  type="email"
                  placeholder="e.g. buyer@domain.com"
                  value={emailQuery}
                  onChange={(e) => setEmailQuery(e.target.value)}
                  className="w-full pl-3 pr-10 py-2.5 bg-white border border-[#EEECE6] focus:border-[#C5A572] outline-none text-xs rounded-none font-sans"
                  required
                />
                <button type="submit" className="absolute right-2 top-2 text-[#C5A572] hover:text-black transition-colors focus:outline-none cursor-pointer">
                  <Search size={16} />
                </button>
              </div>
            </div>
            <button
              type="submit"
              className="w-full py-3 bg-[#1A1A1A] text-white text-[10px] font-sans font-bold uppercase tracking-[0.15em] hover:bg-[#C5A572] transition-colors cursor-pointer focus:outline-none"
            >
              {t.searchButton}
            </button>
          </form>

          {/* Results display */}
          {searchExecuted && (
            <div className="space-y-4 pt-6 border-t border-[#EEECE6]">
              <span className="font-sans text-[8px] font-bold uppercase tracking-[0.2em] text-zinc-400 block">
                {isEn ? `RESULTS FOUND (${matchingInquiries.length})` : `HASIL DITEMUKAN (${matchingInquiries.length})`}
              </span>

              {loading ? (
                <div className="text-zinc-500 font-sans text-[10px] uppercase tracking-widest animate-pulse py-4">
                  {t.queryingDatabase}
                </div>
              ) : errorMsg ? (
                <div className="bg-amber-50 border border-amber-200 p-3.5 text-amber-900 font-sans space-y-1.5 rounded-sm">
                  <div className="text-[10px] font-bold uppercase tracking-wider text-amber-700">🔐 {t.restrictedSession}</div>
                  <div className="text-[11px] leading-relaxed font-light">{errorMsg}</div>
                </div>
              ) : matchingInquiries.length === 0 ? (
                <p className="text-xs text-zinc-400 font-light italic leading-relaxed py-3">
                  {isEn 
                    ? `No registered inquiry ledger entries could be resolved matching "${emailQuery}". Fill out high-fidelity forms on our contact page first.`
                    : `Tidak ada riwayat catatan kueri yang ditemukan sepadan dengan "${emailQuery}". Silakan isi formulir kontak terlebih dahulu.`}
                </p>
              ) : (
                <div className="space-y-4 divide-y divide-zinc-200 max-h-[380px] overflow-y-auto pr-1">
                  {matchingInquiries.map((inq) => (
                    <div key={inq.id} className="pt-4 first:pt-0 space-y-2 text-xs text-left" id={`client-result-item-${inq.id}`}>
                      <div className="flex justify-between items-center gap-2">
                        <span className="font-mono bg-zinc-900 text-white font-bold px-1.5 py-0.5 text-[8px] uppercase tracking-wider">
                          {inq.transactionId}
                        </span>
                        <span className="font-mono text-[9px] text-zinc-400">{new Date(inq.created_at).toLocaleDateString()}</span>
                      </div>
                      <div className="space-y-0.5">
                        <span className="font-sans text-[8px] uppercase font-semibold text-zinc-400 block">
                          {isEn ? "Requested Target:" : "Aset Sasaran:"}
                        </span>
                        <div className="font-serif text-sm font-normal text-[#1A1A1A] leading-tight">{inq.interest}</div>
                      </div>
                      <div className="space-y-0.5">
                        <span className="font-sans text-[8px] uppercase font-semibold text-zinc-400 block">
                          {isEn ? "Assigned Advisor:" : "Kurator Ditunjuk:"}
                        </span>
                        <div className="text-zinc-700 leading-none">{inq.agent}</div>
                      </div>
                      <div className="bg-white border border-zinc-200/50 p-2 text-[10px] text-zinc-500 leading-snug italic font-light truncate">
                        "{inq.message}"
                      </div>
                    </div>
                  ))}
                </div>
              )}
            </div>
          )}
        </div>
      </div>
    </div>
  );
}
