"use client"; import { FormEvent, useState } from "react"; import { useRouter } from "next/navigation"; async function postJson(url: string, body: unknown) { const response = await fetch(url, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) }); const data = await response.json().catch(() => ({})); if (!response.ok) throw new Error(data.error || "İşlem başarısız"); return data; } function Feedback({ message, error }: { message: string; error: boolean }) { if (!message) return null; return

{message}

; } export function CreditAdjustForm({ userId, currentBalance }: { userId: string; currentBalance: number }) { const router = useRouter(); const [busy, setBusy] = useState(false); const [message, setMessage] = useState(""); const [isError, setIsError] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); const formElement = event.currentTarget; const form = new FormData(formElement); const operation = String(form.get("operation")); const amount = Number(form.get("amount")); if (operation === "remove" && !window.confirm(`${amount} kredi bakiyeden çıkarılsın mı?`)) return; setBusy(true); setMessage(""); try { const result = await postJson(`/api/admin/users/${userId}/credits`, { operation, amount, reason: form.get("reason") }); setIsError(false); setMessage(`Yeni bakiye: ${result.balance}`); formElement.reset(); router.refresh(); } catch (error) { setIsError(true); setMessage(error instanceof Error ? error.message : "İşlem başarısız"); } finally { setBusy(false); } } return (
Kredi bakiyesi: {currentBalance.toLocaleString("tr-TR")}
); } export function RoleForm({ userId, currentRole, protectedAdmin }: { userId: string; currentRole: "USER" | "ADMIN"; protectedAdmin: boolean }) { const router = useRouter(); const [busy, setBusy] = useState(false); const [message, setMessage] = useState(""); const [isError, setIsError] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); const form = new FormData(event.currentTarget); const role = String(form.get("role")); if (role === "USER" && !window.confirm("Bu kullanıcının admin yetkisi kaldırılsın mı?")) return; setBusy(true); setMessage(""); try { await postJson(`/api/admin/users/${userId}/role`, { role }); setIsError(false); setMessage("Yetki güncellendi"); router.refresh(); } catch (error) { setIsError(true); setMessage(error instanceof Error ? error.message : "İşlem başarısız"); } finally { setBusy(false); } } return (
{protectedAdmin && Korumalı admin} ); } export function PlanForm({ userId, currentPlan, plans }: { userId: string; currentPlan: string; plans: string[] }) { const router = useRouter(); const [busy, setBusy] = useState(false); const [message, setMessage] = useState(""); const [isError, setIsError] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); const form = new FormData(event.currentTarget); setBusy(true); setMessage(""); try { await postJson(`/api/admin/users/${userId}/plan`, { planCode: form.get("planCode"), status: form.get("status") }); setIsError(false); setMessage("Plan güncellendi"); router.refresh(); } catch (error) { setIsError(true); setMessage(error instanceof Error ? error.message : "İşlem başarısız"); } finally { setBusy(false); } } return (
); } export function ManualPaymentForm({ users }: { users: Array<{ id: string; email: string }> }) { const router = useRouter(); const [busy, setBusy] = useState(false); const [message, setMessage] = useState(""); const [isError, setIsError] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); const formElement = event.currentTarget; const form = new FormData(formElement); setBusy(true); setMessage(""); try { await postJson("/api/admin/payments", { userId: form.get("userId"), amountCents: Math.round(Number(form.get("amount")) * 100), currency: form.get("currency"), creditGranted: Number(form.get("creditGranted") || 0), description: form.get("description"), externalId: form.get("externalId") || null }); setIsError(false); setMessage("Ödeme kaydedildi"); formElement.reset(); router.refresh(); } catch (error) { setIsError(true); setMessage(error instanceof Error ? error.message : "İşlem başarısız"); } finally { setBusy(false); } } return (
); } export function PaymentStatusForm({ paymentId, status }: { paymentId: string; status: string }) { const router = useRouter(); const [busy, setBusy] = useState(false); async function submit(event: FormEvent) { event.preventDefault(); const form = new FormData(event.currentTarget); const nextStatus = String(form.get("status")); if ((nextStatus === "REFUNDED" || nextStatus === "CANCELED") && !window.confirm(`Ödeme ${nextStatus} yapılsın mı? Kredi bakiyesi otomatik değişmez.`)) return; setBusy(true); try { await postJson(`/api/admin/payments/${paymentId}/status`, { status: nextStatus }); router.refresh(); } finally { setBusy(false); } } return
; }