"use client";

import Image from "next/image";
import Link from "next/link";
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import {
  AlertCircle,
  ArrowLeft,
  Briefcase,
  Building,
  Check,
  Copy,
  CreditCard,
  Home,
  Info,
  Loader2,
  Lock,
  MapPin,
  PawPrint,
  Phone,
  Plus,
  ShieldCheck,
  Truck,
  User,
  X,
} from "lucide-react";
import { cartSubtotal, useCartStore } from "@/components/cart-store";
import { CITIES, formatPrice, FREE_SHIPPING_LIMIT, SHIPPING_FEE } from "@/lib/format";
import {
  CardData,
  CreditCardPreviewAndInputs,
} from "@/components/credit-card-preview";
import { ThreeDSecureModal } from "@/components/three-d-secure-modal";

type Address = {
  id: number;
  title: string;
  name: string;
  phone: string;
  city: string;
  address: string;
  isDefault: boolean;
};

type UserProfile = {
  id: number;
  name: string;
  email: string;
  phone: string;
  city: string;
  address: string;
};

export function CheckoutForm() {
  const router = useRouter();
  const items = useCartStore((s) => s.items);
  const clear = useCartStore((s) => s.clear);
  const [mounted, setMounted] = useState(false);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);

  // Müşteri & Adres Verileri
  const [user, setUser] = useState<UserProfile | null>(null);
  const [addresses, setAddresses] = useState<Address[]>([]);
  const [selectedAddressId, setSelectedAddressId] = useState<number | "new">("new");
  const [showNewAddressForm, setShowNewAddressForm] = useState(false);
  const [fetchingUser, setFetchingUser] = useState(true);

  // Manuel / Yeni Adres Form Alanları
  const [formName, setFormName] = useState("");
  const [formEmail, setFormEmail] = useState("");
  const [formPhone, setFormPhone] = useState("");
  const [formCity, setFormCity] = useState("İstanbul");
  const [formAddress, setFormAddress] = useState("");
  const [formTitle, setFormTitle] = useState("Ev");
  const [saveAddressToBook, setSaveAddressToBook] = useState(true);
  const [orderNote, setOrderNote] = useState("");
  const [paymentMethod, setPaymentMethod] = useState<"kart" | "havale" | "kapida">("kart");

  // Kredi Kartı Bilgileri State
  const [card, setCard] = useState<CardData>({
    holder: "",
    number: "",
    expiry: "",
    cvv: "",
    brand: "generic",
  });

  // 3D Secure Modal State
  const [is3DModalOpen, setIs3DModalOpen] = useState(false);
  const [ibanCopied, setIbanCopied] = useState(false);

  // PayTR iFrame Modal State
  const [isPaytrModalOpen, setIsPaytrModalOpen] = useState(false);
  const [paytrIframeUrl, setPaytrIframeUrl] = useState<string | null>(null);

  // Dinamik Havale / EFT Bilgileri
  const [havaleInfo, setHavaleInfo] = useState({
    bank: "Ziraat Bankası",
    name: "PetMarketim Ticaret A.Ş.",
    iban: "TR33 0001 0000 0000 0000 00",
  });

  useEffect(() => {
    setMounted(true);
    loadUserAndAddresses();
  }, []);

  async function loadUserAndAddresses() {
    setFetchingUser(true);
    try {
      const meRes = await fetch("/api/auth/me");
      const meData = await meRes.json();
      if (meData.user) {
        setUser(meData.user);
        setFormName(meData.user.name || "");
        setFormEmail(meData.user.email || "");
        setFormPhone(meData.user.phone || "");
        setCard((prev) => ({ ...prev, holder: (meData.user.name || "").toUpperCase() }));
        if (meData.user.city) setFormCity(meData.user.city);
        if (meData.user.address) setFormAddress(meData.user.address);

        const addrRes = await fetch("/api/addresses");
        const addrData = await addrRes.json();
        if (addrRes.ok && Array.isArray(addrData.addresses) && addrData.addresses.length > 0) {
          setAddresses(addrData.addresses);
          const defaultAddr =
            addrData.addresses.find((a: Address) => a.isDefault) || addrData.addresses[0];
          setSelectedAddressId(defaultAddr.id);
          setShowNewAddressForm(false);
        } else {
          setSelectedAddressId("new");
          setShowNewAddressForm(true);
        }
      }

      // Mağaza ödeme ve havale ayarlarını dinamik getir
      try {
        const setRes = await fetch("/api/settings");
        const setData = await setRes.json();
        if (setData?.payment) {
          setHavaleInfo({
            bank: setData.payment.havaleBank || "Ziraat Bankası",
            name: setData.payment.havaleName || "PetMarketim Ticaret A.Ş.",
            iban: setData.payment.havaleIban || "TR33 0001 0000 0000 0000 0000 00",
          });
        }
      } catch {
        // Fallback varsayılanları koru
      }
    } catch (err) {
      console.error("Kullanıcı/adres bilgisi yüklenemedi:", err);
    } finally {
      setFetchingUser(false);
    }
  }

  const subtotal = cartSubtotal(items);
  const shipping = subtotal === 0 || subtotal >= FREE_SHIPPING_LIMIT ? 0 : SHIPPING_FEE;
  const total = subtotal + shipping;

  function getDeliveryDetails() {
    let deliveryName = formName;
    let deliveryPhone = formPhone;
    let deliveryCity = formCity;
    let deliveryAddress = formAddress;
    const deliveryEmail = formEmail;

    if (selectedAddressId !== "new") {
      const found = addresses.find((a) => a.id === selectedAddressId);
      if (found) {
        deliveryName = found.name;
        deliveryPhone = found.phone;
        deliveryCity = found.city;
        deliveryAddress = found.address;
      }
    }

    return {
      deliveryName,
      deliveryPhone,
      deliveryCity,
      deliveryAddress,
      deliveryEmail,
    };
  }

  function validateCheckout() {
    const { deliveryName, deliveryPhone, deliveryCity, deliveryAddress, deliveryEmail } =
      getDeliveryDetails();

    if (!deliveryName || deliveryName.trim().length < 3) {
      throw new Error("Lütfen alıcı ad ve soyadını eksiksiz girin.");
    }
    if (!deliveryPhone || deliveryPhone.replace(/\D/g, "").length < 10) {
      throw new Error("Lütfen geçerli bir telefon numarası girin.");
    }
    if (!deliveryCity) {
      throw new Error("Lütfen teslimat ili seçin.");
    }
    if (!deliveryAddress || deliveryAddress.trim().length < 10) {
      throw new Error("Lütfen açık teslimat adresini en az 10 karakter olarak girin.");
    }
    if (!deliveryEmail || !deliveryEmail.includes("@")) {
      throw new Error("Lütfen sipariş takibi için geçerli bir e-posta adresi girin.");
    }

    if (paymentMethod === "kart") {
      if (!card.holder || card.holder.trim().length < 3) {
        throw new Error("Lütfen kart üzerindeki isim ve soyismi girin.");
      }
      const rawCard = card.number.replace(/\s+/g, "");
      if (rawCard.length < 16) {
        throw new Error("Lütfen 16 haneli kart numaranızı eksiksiz girin.");
      }
      if (!card.expiry || card.expiry.length < 5) {
        throw new Error("Lütfen kartınızın son kullanma tarihini (AA/YY) girin.");
      }
      if (!card.cvv || card.cvv.length < 3) {
        throw new Error("Lütfen kartın arkasındaki 3 haneli CVV kodunu girin.");
      }
    }

    return true;
  }

  async function handleFinishOrder(cardDetailsParam?: { last4: string; brand: string }) {
    setError(null);
    setLoading(true);

    try {
      const { deliveryName, deliveryPhone, deliveryCity, deliveryAddress, deliveryEmail } =
        getDeliveryDetails();

      // Yeni adres kaydedilecekse
      if (selectedAddressId === "new" && saveAddressToBook && user) {
        try {
          await fetch("/api/addresses", {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              title: formTitle,
              name: deliveryName,
              phone: deliveryPhone,
              city: deliveryCity,
              address: deliveryAddress,
              isDefault: addresses.length === 0,
            }),
          });
        } catch (addrErr) {
          console.warn("Adres kaydedilemedi:", addrErr);
        }
      }

      const res = await fetch("/api/siparis", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          customer: {
            name: deliveryName,
            email: deliveryEmail,
            phone: deliveryPhone,
            city: deliveryCity,
            address: deliveryAddress,
            note: orderNote,
          },
          paymentMethod,
          shippingMethod: "aras",
          cardDetails: cardDetailsParam,
          items: items.map((i) => ({ id: i.id, qty: i.qty })),
        }),
      });

      const json = (await res.json()) as { ok?: boolean; orderNo?: string; error?: string };
      if (!res.ok || !json.ok || !json.orderNo) {
        throw new Error(json.error ?? "Sipariş oluşturulamadı.");
      }

      clear();
      router.push(`/odeme/basarili?no=${encodeURIComponent(json.orderNo)}`);
    } catch (err) {
      setError(err instanceof Error ? err.message : "Beklenmeyen bir hata oluştu.");
      setLoading(false);
    }
  }

  async function handleFormSubmit(e: React.FormEvent<HTMLFormElement>) {
    e.preventDefault();
    setError(null);

    try {
      validateCheckout();
    } catch (err) {
      setError(err instanceof Error ? err.message : "Lütfen bilgilerinizi kontrol edin.");
      return;
    }

    if (paymentMethod === "kart") {
      setLoading(true);
      try {
        const { deliveryName, deliveryPhone, deliveryCity, deliveryAddress, deliveryEmail } =
          getDeliveryDetails();
        const tempOrderNo = `PM${Date.now().toString(36).toUpperCase()}${Math.floor(Math.random() * 90 + 10)}`;

        const initRes = await fetch("/api/payment/initialize", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({
            orderNo: tempOrderNo,
            totalTl: total / 100,
            customer: {
              name: deliveryName,
              email: deliveryEmail,
              phone: deliveryPhone,
              city: deliveryCity,
              address: deliveryAddress,
            },
            items: items.map((i) => ({ id: i.id, name: i.name, price: i.price, qty: i.qty })),
          }),
        });

        const initData = await initRes.json();
        setLoading(false);

        if (initData?.provider === "iyzico" && initData?.paymentPageUrl) {
          // Canlı Iyzico 3D Secure Ödeme Sayfasına Yönlendir
          window.location.href = initData.paymentPageUrl;
          return;
        }

        if (initData?.provider === "paytr" && initData?.iframeUrl) {
          // PayTR iFrame Modalını Aç
          setPaytrIframeUrl(initData.iframeUrl);
          setIsPaytrModalOpen(true);
          return;
        }

        // Canlı anahtar girilmemişse (Test/Hazır Mod): 3D Secure SMS ekranını aç
        setIs3DModalOpen(true);
      } catch (err) {
        setLoading(false);
        setIs3DModalOpen(true);
      }
    } else {
      // Havale veya Kapıda ödeme doğrudan tamamlanır
      handleFinishOrder();
    }
  }

  function handleCopyIban(iban: string) {
    navigator.clipboard.writeText(iban);
    setIbanCopied(true);
    setTimeout(() => setIbanCopied(false), 2000);
  }

  if (!mounted || fetchingUser) {
    return (
      <div className="grid min-h-[40vh] place-items-center">
        <Loader2 className="size-8 animate-spin text-brand-500" aria-hidden />
      </div>
    );
  }

  if (items.length === 0) {
    return (
      <div className="mx-auto max-w-2xl px-4 py-24 text-center">
        <span className="mx-auto grid size-24 place-items-center rounded-full bg-sand">
          <PawPrint className="size-12 text-brand-400" aria-hidden />
        </span>
        <h1 className="mt-5 font-display text-2xl font-extrabold text-ink">
          Ödeme için önce sepetine bir şeyler eklemelisin
        </h1>
        <p className="mx-auto mt-2 max-w-sm text-sm font-semibold text-mocha">
          Görünüşe göre sepetin boş. Patili dostun için harika ürünlerle dolu raflarımıza göz at!
        </p>
        <Link
          href="/urunler"
          className="mt-6 inline-block rounded-full bg-gradient-to-r from-brand-500 to-brand-600 px-7 py-3.5 text-sm font-extrabold text-white shadow-lg shadow-brand-500/30"
        >
          Ürünlere Göz At
        </Link>
      </div>
    );
  }

  const inputCls =
    "w-full rounded-2xl border-2 border-sand-dark bg-cream/50 px-4 py-3 pl-11 text-sm font-bold text-ink outline-none transition-colors placeholder:text-latte focus:border-brand-400 focus:bg-white";

  const { deliveryPhone } = getDeliveryDetails();

  return (
    <div className="mx-auto max-w-7xl px-4 py-10 sm:px-6">
      <Link
        href="/sepet"
        className="inline-flex items-center gap-1.5 text-sm font-extrabold text-mocha transition-colors hover:text-brand-600"
      >
        <ArrowLeft className="size-4" aria-hidden /> Sepete Dön
      </Link>
      <h1 className="mt-3 font-display text-3xl font-extrabold text-ink sm:text-4xl">
        Ödeme ve Teslimat
      </h1>
      <p className="mt-1.5 flex items-center gap-1.5 text-sm font-bold text-mocha">
        <Lock className="size-4 text-emerald-600" aria-hidden />
        Bilgilerin 256-bit SSL ile şifrelenerek korunur.
      </p>

      <form onSubmit={handleFormSubmit} className="mt-8 grid gap-8 lg:grid-cols-[1fr_420px]">
        {/* Sol Sütun: Teslimat & Ödeme */}
        <div className="space-y-6">
          {/* 1. ADIM: TESLİMAT BİLGİLERİ */}
          <section className="rounded-[2rem] bg-white p-6 shadow-sm ring-1 ring-sand-dark/60 sm:p-8">
            <div className="flex flex-wrap items-center justify-between gap-2">
              <h2 className="flex items-center gap-2 font-display text-xl font-extrabold text-ink">
                <span className="grid size-8 place-items-center rounded-full bg-brand-500 text-sm font-extrabold text-white">
                  1
                </span>
                Teslimat Adresi
              </h2>

              {addresses.length > 0 && !showNewAddressForm && (
                <button
                  type="button"
                  onClick={() => {
                    setSelectedAddressId("new");
                    setShowNewAddressForm(true);
                  }}
                  className="inline-flex items-center gap-1.5 text-xs font-extrabold text-brand-600 hover:text-brand-700"
                >
                  <Plus className="size-4" /> Yeni Adres Ekle
                </button>
              )}
            </div>

            {/* Kayıtlı Adres Kartları */}
            {addresses.length > 0 && !showNewAddressForm && (
              <div className="mt-5 space-y-3">
                <p className="text-xs font-bold text-mocha">
                  Kayıtlı adreslerinizden birini seçerek anında devam edebilirsiniz:
                </p>
                <div className="grid gap-3 sm:grid-cols-2">
                  {addresses.map((addr) => {
                    const isSelected = selectedAddressId === addr.id;
                    const isHome = addr.title.toLowerCase().includes("ev");
                    const isWork =
                      addr.title.toLowerCase().includes("iş") ||
                      addr.title.toLowerCase().includes("is");

                    return (
                      <div
                        key={addr.id}
                        onClick={() => setSelectedAddressId(addr.id)}
                        className={`group relative flex cursor-pointer flex-col justify-between rounded-2xl p-4 transition-all ${
                          isSelected
                            ? "border-2 border-brand-500 bg-brand-50/40 shadow-md shadow-brand-500/10"
                            : "border-2 border-sand-dark bg-white hover:border-brand-300 hover:bg-sand/30"
                        }`}
                      >
                        <div>
                          <div className="flex items-center justify-between">
                            <span className="flex items-center gap-2 font-extrabold text-ink">
                              <span className="grid size-7 place-items-center rounded-lg bg-sand/80 text-brand-600">
                                {isHome ? (
                                  <Home className="size-3.5" />
                                ) : isWork ? (
                                  <Briefcase className="size-3.5" />
                                ) : (
                                  <Building className="size-3.5" />
                                )}
                              </span>
                              {addr.title}
                            </span>
                            <div className="flex items-center gap-2">
                              {addr.isDefault && (
                                <span className="rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-extrabold text-brand-600">
                                  Varsayılan
                                </span>
                              )}
                              <span
                                className={`grid size-5 place-items-center rounded-full border-2 transition-all ${
                                  isSelected
                                    ? "border-brand-500 bg-brand-500 text-white"
                                    : "border-sand-dark bg-white"
                                }`}
                              >
                                {isSelected && <Check className="size-3 stroke-[3]" />}
                              </span>
                            </div>
                          </div>

                          <div className="mt-3 space-y-0.5 text-xs">
                            <p className="font-extrabold text-ink">{addr.name}</p>
                            <p className="font-semibold text-mocha">{addr.phone}</p>
                            <p className="mt-1 line-clamp-2 text-mocha/90 font-medium">
                              {addr.address}
                            </p>
                            <p className="font-extrabold text-brand-600 pt-1">{addr.city}</p>
                          </div>
                        </div>
                      </div>
                    );
                  })}
                </div>
              </div>
            )}

            {/* Yeni Adres Giriş Formu */}
            {showNewAddressForm && (
              <div className="mt-5 space-y-4">
                {addresses.length > 0 && (
                  <div className="flex items-center justify-between rounded-xl bg-sand/60 px-4 py-2.5">
                    <span className="text-xs font-bold text-ink">Yeni bir teslimat adresi giriyorsunuz</span>
                    <button
                      type="button"
                      onClick={() => {
                        setShowNewAddressForm(false);
                        const def = addresses.find((a) => a.isDefault) || addresses[0];
                        setSelectedAddressId(def.id);
                      }}
                      className="text-xs font-extrabold text-brand-600 hover:underline"
                    >
                      Kayıtlı Adreslerime Dön
                    </button>
                  </div>
                )}

                <div className="grid gap-4 sm:grid-cols-2">
                  <div>
                    <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                      Adres Başlığı
                    </label>
                    <div className="flex gap-2">
                      {["Ev", "İş Yeri", "Diğer"].map((t) => (
                        <button
                          key={t}
                          type="button"
                          onClick={() => setFormTitle(t)}
                          className={`flex-1 rounded-xl py-2 text-xs font-extrabold transition-all ${
                            formTitle === t
                              ? "bg-brand-500 text-white shadow-sm"
                              : "bg-sand/60 text-mocha hover:bg-sand"
                          }`}
                        >
                          {t}
                        </button>
                      ))}
                    </div>
                  </div>

                  <div className="relative">
                    <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                      Alıcı Ad Soyad
                    </label>
                    <div className="relative">
                      <User className="pointer-events-none absolute left-4 top-1/2 size-4.5 -translate-y-1/2 text-latte" />
                      <input
                        value={formName}
                        onChange={(e) => setFormName(e.target.value)}
                        placeholder="Örn: Elif Yılmaz"
                        className={inputCls}
                      />
                    </div>
                  </div>

                  <div className="relative">
                    <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                      Telefon Numarası
                    </label>
                    <div className="relative">
                      <Phone className="pointer-events-none absolute left-4 top-1/2 size-4.5 -translate-y-1/2 text-latte" />
                      <input
                        type="tel"
                        value={formPhone}
                        onChange={(e) => setFormPhone(e.target.value)}
                        placeholder="05xx xxx xx xx"
                        className={inputCls}
                      />
                    </div>
                  </div>

                  <div className="relative">
                    <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                      Şehir
                    </label>
                    <div className="relative">
                      <MapPin className="pointer-events-none absolute left-4 top-1/2 size-4.5 -translate-y-1/2 text-latte" />
                      <select
                        value={formCity}
                        onChange={(e) => setFormCity(e.target.value)}
                        className={`${inputCls} appearance-none`}
                      >
                        {CITIES.map((c) => (
                          <option key={c} value={c}>
                            {c}
                          </option>
                        ))}
                      </select>
                    </div>
                  </div>

                  <div className="sm:col-span-2">
                    <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                      Açık Adres
                    </label>
                    <textarea
                      value={formAddress}
                      onChange={(e) => setFormAddress(e.target.value)}
                      rows={3}
                      placeholder="Mahalle, cadde, sokak, bina ve daire no"
                      className="w-full rounded-2xl border-2 border-sand-dark bg-cream/50 px-4 py-3 text-sm font-bold text-ink outline-none transition-colors placeholder:text-latte focus:border-brand-400 focus:bg-white"
                    />
                  </div>

                  <div className="sm:col-span-2">
                    <label className="flex cursor-pointer items-center gap-2.5 rounded-xl border border-sand bg-sand/30 p-3 text-xs font-bold text-ink">
                      <input
                        type="checkbox"
                        checked={saveAddressToBook}
                        onChange={(e) => setSaveAddressToBook(e.target.checked)}
                        className="size-4 rounded accent-brand-500"
                      />
                      <span>
                        Bu adresi <strong className="font-extrabold text-brand-600">Adres Defterime Kaydet</strong>
                      </span>
                    </label>
                  </div>
                </div>
              </div>
            )}

            {/* E-posta ve Not Alanları */}
            <div className="mt-5 border-t border-sand pt-4 space-y-4">
              <div className="relative">
                <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                  Sipariş Takip E-Postası
                </label>
                <div className="relative">
                  <span className="pointer-events-none absolute left-4 top-1/2 -translate-y-1/2 font-extrabold text-latte">
                    @
                  </span>
                  <input
                    type="email"
                    value={formEmail}
                    onChange={(e) => setFormEmail(e.target.value)}
                    placeholder="ornek@domain.com"
                    className={inputCls}
                  />
                </div>
              </div>

              <div>
                <label className="mb-1.5 block text-xs font-extrabold uppercase tracking-wider text-mocha">
                  Sipariş Notu <span className="font-bold normal-case text-latte">(isteğe bağlı)</span>
                </label>
                <textarea
                  value={orderNote}
                  onChange={(e) => setOrderNote(e.target.value)}
                  rows={2}
                  placeholder='Örn: "Kapıyı çalmayın, bebek uyuyor" veya "Zili iki kez çalın"'
                  className="w-full rounded-2xl border-2 border-sand-dark bg-cream/50 px-4 py-3 text-sm font-bold text-ink outline-none transition-colors placeholder:text-latte focus:border-brand-400 focus:bg-white"
                />
              </div>
            </div>
          </section>

          {/* 2. ADIM: ÖDEME YÖNTEMİ & KART ALANI */}
          <section className="rounded-[2rem] bg-white p-6 shadow-sm ring-1 ring-sand-dark/60 sm:p-8">
            <h2 className="flex items-center gap-2 font-display text-xl font-extrabold text-ink">
              <span className="grid size-8 place-items-center rounded-full bg-brand-500 text-sm font-extrabold text-white">
                2
              </span>
              Ödeme Yöntemi
            </h2>

            <div className="mt-5 space-y-3">
              {[
                {
                  id: "kart" as const,
                  title: "Kredi / Banka Kartı",
                  text: "Visa, Mastercard ve Troy — 3D Secure ile Güvenli Ödeme",
                  icon: CreditCard,
                  recommended: true,
                },
                {
                  id: "havale" as const,
                  title: "Havale / EFT",
                  text: "Banka hesabımıza doğrudan transfer ile ödeme",
                  icon: Building,
                  recommended: false,
                },
                {
                  id: "kapida" as const,
                  title: "Kapıda Ödeme",
                  text: "Teslimatta nakit veya kredi kartı ile ödeme",
                  icon: Truck,
                  recommended: false,
                },
              ].map((opt) => (
                <label
                  key={opt.id}
                  onClick={() => setPaymentMethod(opt.id)}
                  className={`flex cursor-pointer items-start gap-3 rounded-2xl border-2 p-4 transition-all ${
                    paymentMethod === opt.id
                      ? "border-brand-500 bg-brand-50/60 shadow-md shadow-brand-500/10"
                      : "border-sand-dark hover:border-brand-300"
                  }`}
                >
                  <input
                    type="radio"
                    name="odeme-yontemi"
                    value={opt.id}
                    checked={paymentMethod === opt.id}
                    onChange={() => setPaymentMethod(opt.id)}
                    className="mt-1 size-4 accent-brand-600"
                  />
                  <opt.icon className="mt-0.5 size-5 shrink-0 text-brand-600" />
                  <span className="flex-1">
                    <span className="flex items-center gap-2 font-extrabold text-ink">
                      {opt.title}
                      {opt.recommended && (
                        <span className="rounded-full bg-emerald-100 px-2 py-0.5 text-[10px] font-extrabold text-emerald-700">
                          Önerilen
                        </span>
                      )}
                    </span>
                    <span className="mt-0.5 block text-xs font-semibold text-mocha">{opt.text}</span>
                  </span>
                </label>
              ))}
            </div>

            {/* SEÇİLEN ÖDEME YÖNTEMİNE ÖZEL İÇERİK */}
            <div className="mt-6 border-t border-sand pt-6">
              {/* 1. KREDİ KARTI FORMU & CANLI KART */}
              {paymentMethod === "kart" && (
                <div className="space-y-4">
                  <div className="flex items-center justify-between">
                    <h3 className="text-sm font-extrabold text-ink">
                      Kart Bilgilerinizi Girin
                    </h3>
                    <span className="flex items-center gap-1 text-[11px] font-bold text-emerald-700">
                      <Lock className="size-3.5" /> 256-Bit SSL Korumalı
                    </span>
                  </div>

                  <CreditCardPreviewAndInputs card={card} onChange={setCard} />
                </div>
              )}

              {/* 2. HAVALE / EFT BİLGİLERİ */}
              {paymentMethod === "havale" && (
                <div className="rounded-2xl border-2 border-sand-dark bg-sand/20 p-5 space-y-4">
                  <div className="flex items-center gap-2 font-extrabold text-ink text-sm">
                    <Building className="size-4 text-brand-500" />
                    <span>PetMarketim Resmi Banka Hesap Bilgileri</span>
                  </div>

                  <div className="space-y-3 rounded-xl bg-white p-4 text-xs font-semibold text-slate-800 shadow-sm ring-1 ring-sand-dark/50">
                    <div className="flex justify-between py-1 border-b border-sand">
                      <span className="text-mocha">Banka:</span>
                      <strong className="text-ink font-extrabold">{havaleInfo.bank}</strong>
                    </div>
                    <div className="flex justify-between py-1 border-b border-sand">
                      <span className="text-mocha">Alıcı Ünvanı:</span>
                      <strong className="text-ink font-extrabold">{havaleInfo.name}</strong>
                    </div>
                    <div className="flex items-center justify-between py-1">
                      <span className="text-mocha">IBAN:</span>
                      <div className="flex items-center gap-2">
                        <code className="font-mono font-bold text-brand-700 bg-sand/40 px-2 py-0.5 rounded">
                          {havaleInfo.iban}
                        </code>
                        <button
                          type="button"
                          onClick={() => handleCopyIban(havaleInfo.iban)}
                          className="flex items-center gap-1 text-xs font-extrabold text-brand-600 hover:text-brand-800"
                        >
                          <Copy className="size-3.5" />
                          {ibanCopied ? "Kopyalandı!" : "Kopyala"}
                        </button>
                      </div>
                    </div>
                  </div>

                  <div className="flex items-start gap-2 text-xs font-semibold text-mocha">
                    <Info className="size-4 shrink-0 text-brand-500 mt-0.5" />
                    <span>
                      Siparişinizi tamamladıktan sonra lütfen açıklama kısmına{" "}
                      <strong className="text-ink">adınızı ve sipariş numaranızı</strong> yazarak havaleyi gerçekleştiriniz.
                    </span>
                  </div>
                </div>
              )}

              {/* 3. KAPIDA ÖDEME BİLGİLERİ */}
              {paymentMethod === "kapida" && (
                <div className="rounded-2xl border-2 border-sand-dark bg-sand/20 p-5 space-y-3">
                  <div className="flex items-center gap-2 font-extrabold text-ink text-sm">
                    <Truck className="size-4 text-brand-500" />
                    <span>Kapıda Teslimatta Ödeme Koşulları</span>
                  </div>
                  <p className="text-xs font-semibold leading-relaxed text-slate-700">
                    Siparişiniz Aras Kargo güvencesiyle kapınıza ulaştığında, kargo görevlisine{" "}
                    <strong>Nakit</strong> veya <strong>Kredi Kartı (Temassız / Çipli)</strong> ile ödeme yapabilirsiniz.
                  </p>
                  <div className="rounded-xl bg-white p-3 text-xs font-bold text-brand-700 ring-1 ring-sand-dark/60">
                    📦 Teslimat öncesinde kargo takip kodunuz SMS ile cep telefonunuza iletilecektir.
                  </div>
                </div>
              )}
            </div>
          </section>
        </div>

        {/* Sağ Sütun: Sipariş Özeti */}
        <aside className="h-fit rounded-[2rem] bg-white p-6 shadow-sm ring-1 ring-sand-dark/60 lg:sticky lg:top-36">
          <h2 className="font-display text-xl font-extrabold text-ink">
            Sipariş Özeti
            <span className="ml-2 rounded-full bg-brand-100 px-2.5 py-0.5 text-xs font-extrabold text-brand-700">
              {items.length} ürün
            </span>
          </h2>

          <ul className="mt-4 max-h-64 space-y-3 overflow-y-auto pr-1">
            {items.map((item) => (
              <li key={item.id} className="flex items-center gap-3">
                <span className="relative block size-14 shrink-0 overflow-hidden rounded-xl bg-sand">
                  <Image src={item.image} alt={item.name} fill sizes="56px" className="object-cover" />
                  <span className="absolute bottom-0.5 right-0.5 grid size-5 place-items-center rounded-full bg-ink/85 text-[10px] font-extrabold text-white">
                    {item.qty}
                  </span>
                </span>
                <span className="min-w-0 flex-1">
                  <span className="block truncate text-xs font-extrabold text-ink">{item.name}</span>
                  <span className="block text-[11px] font-bold text-mocha">{item.unit}</span>
                </span>
                <span className="text-xs font-extrabold text-brand-600">
                  {formatPrice(item.price * item.qty)}
                </span>
              </li>
            ))}
          </ul>

          <dl className="mt-4 space-y-2.5 border-t border-dashed border-sand-dark pt-4 text-sm">
            <div className="flex items-center justify-between">
              <dt className="font-bold text-mocha">Ara Toplam</dt>
              <dd className="font-extrabold text-ink">{formatPrice(subtotal)}</dd>
            </div>
            <div className="flex items-center justify-between">
              <dt className="font-bold text-mocha">Kargo</dt>
              <dd className={`font-extrabold ${shipping === 0 ? "text-emerald-600" : "text-ink"}`}>
                {shipping === 0 ? "Ücretsiz" : formatPrice(shipping)}
              </dd>
            </div>
            <div className="flex items-center justify-between pt-1">
              <dt className="font-display text-base font-extrabold text-ink">Genel Toplam</dt>
              <dd className="font-display text-2xl font-extrabold text-brand-600">
                {formatPrice(total)}
              </dd>
            </div>
          </dl>

          {error && (
            <p className="mt-4 flex items-start gap-2 rounded-2xl bg-red-50 p-3.5 text-xs font-bold text-red-700 ring-1 ring-red-200">
              <AlertCircle className="mt-0.5 size-4 shrink-0" aria-hidden />
              {error}
            </p>
          )}

          <button
            type="submit"
            disabled={loading}
            className="mt-5 flex w-full items-center justify-center gap-2 rounded-full bg-gradient-to-r from-brand-500 to-brand-600 py-4 text-base font-extrabold text-white shadow-xl shadow-brand-500/30 transition-all hover:-translate-y-0.5 hover:shadow-brand-500/50 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-60"
          >
            {loading ? (
              <>
                <Loader2 className="size-5 animate-spin" aria-hidden />
                İşlem Yapılıyor…
              </>
            ) : paymentMethod === "kart" ? (
              <>
                <Lock className="size-5" aria-hidden />
                3D Secure ile Öde — {formatPrice(total)}
              </>
            ) : (
              <>
                <Check className="size-5" aria-hidden />
                Siparişi Onayla — {formatPrice(total)}
              </>
            )}
          </button>

          <p className="mt-3 text-center text-[11px] font-semibold leading-relaxed text-mocha">
            Siparişini onaylayarak{" "}
            <span className="underline underline-offset-2">Mesafeli Satış Sözleşmesi</span>&apos;ni kabul etmiş olursun.
          </p>
        </aside>
      </form>

      {/* 3D SECURE BANKA ONAY MODALI */}
      <ThreeDSecureModal
        isOpen={is3DModalOpen}
        onClose={() => setIs3DModalOpen(false)}
        onSuccess={() => {
          setIs3DModalOpen(false);
          const rawNum = card.number.replace(/\s+/g, "");
          const last4 = rawNum.slice(-4);
          handleFinishOrder({ last4, brand: card.brand });
        }}
        amount={total}
        phone={deliveryPhone}
        cardNumber={card.number}
        cardHolder={card.holder}
      />

      {/* PAYTR CANLI ÖDEME MODALI */}
      {isPaytrModalOpen && paytrIframeUrl && (
        <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
          <div
            className="fixed inset-0 bg-ink/60 backdrop-blur-sm"
            onClick={() => setIsPaytrModalOpen(false)}
          />
          <div className="relative z-10 w-full max-w-2xl overflow-hidden rounded-3xl bg-white shadow-2xl">
            <div className="flex items-center justify-between border-b border-slate-200 px-6 py-4">
              <span className="flex items-center gap-2 font-display text-base font-extrabold text-ink">
                <Lock className="size-4 text-emerald-600" />
                PayTR Güvenli Ödeme Ekranı (256-Bit SSL)
              </span>
              <button
                type="button"
                onClick={() => setIsPaytrModalOpen(false)}
                className="grid size-8 place-items-center rounded-xl text-mocha hover:bg-slate-100 transition"
              >
                <X className="size-4" />
              </button>
            </div>
            <div className="h-[600px] w-full">
              <iframe
                src={paytrIframeUrl}
                frameBorder="0"
                scrolling="yes"
                className="size-full"
                title="PayTR Güvenli Ödeme"
              />
            </div>
          </div>
        </div>
      )}
    </div>
  );
}
