"use client"; import React, { useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; export function getClientToken(): string { if (typeof window === "undefined") return ""; const match = document.cookie.match(new RegExp("(^| )admin_token=([^;]+)")); if (match) return decodeURIComponent(match[2]); return localStorage.getItem("admin_token") || ""; } export function setClientToken(token: string) { if (typeof window === "undefined") return; document.cookie = `admin_token=${encodeURIComponent(token)}; path=/; max-age=604800; SameSite=Lax`; localStorage.setItem("admin_token", token); } export function removeClientToken() { if (typeof window === "undefined") return; document.cookie = "admin_token=; path=/; max-age=0; SameSite=Lax"; localStorage.removeItem("admin_token"); } export function AdminHeader({ title, description, action }: { title: string; description?: string; action?: React.ReactNode }) { return (

{title}

{description &&

{description}

}
{action &&
{action}
}
); } export function AlertBanner({ type, message, onClose }: { type: "error" | "success" | "info"; message: string; onClose?: () => void }) { const styles = { error: "bg-red-50 dark:bg-red-950/40 border-red-200 dark:border-red-800 text-red-700 dark:text-red-300", success: "bg-emerald-50 dark:bg-emerald-950/40 border-emerald-200 dark:border-emerald-800 text-emerald-700 dark:text-emerald-300", info: "bg-blue-50 dark:bg-blue-950/40 border-blue-200 dark:border-blue-800 text-blue-700 dark:text-blue-300", }; return (
{message}
{onClose && ( )}
); } export function Modal({ isOpen, title, onClose, children }: { isOpen: boolean; title: string; onClose: () => void; children: React.ReactNode }) { if (!isOpen) return null; return (

{title}

{children}
); } export function ConfirmDeleteModal({ isOpen, title = "Confirm Deletion", description = "Are you sure you want to delete this item? This action cannot be undone.", onClose, onConfirm, isSubmitting, }: { isOpen: boolean; title?: string; description?: string; onClose: () => void; onConfirm: () => void; isSubmitting?: boolean; }) { if (!isOpen) return null; return (

{description}

); }