import Link from "next/link"; import type { ReactNode } from "react"; import { FooterBadgeMarquee } from "@/components/FooterBadgeMarquee"; import { Logo } from "@/components/Logo"; import { prisma } from "@/lib/db"; import { DOCKER_HUB_URL, DOCS_URL, GITEA_ISSUES_URL, GITEA_URL, SUPPORT_EMAIL, } from "@/lib/plans"; function GiteaIcon({ className }: { className?: string }) { return ( ); } function DockerIcon({ className }: { className?: string }) { return ( ); } function FooterLink({ href, children, external, }: { href: string; children: ReactNode; external?: boolean; }) { const className = "transition-colors duration-300 hover:text-white"; if (external || href.startsWith("#") || href.startsWith("mailto:")) { return ( {children} ); } return ( {children} ); } function LegalLink({ href, children, external, }: { href: string; children: ReactNode; external?: boolean; }) { const className = "transition-colors duration-300 hover:text-gray-300"; if (external) { return ( {children} ); } return ( {children} ); } const STATUS_URL = "https://status.atakanozban.com/status/2"; const DOCS_INTRO_URL = `${DOCS_URL.replace(/\/$/, "")}/docs/intro`; const DOCS_API_URL = `${DOCS_URL.replace(/\/$/, "")}/docs/api/overview`; export async function Footer() { const year = new Date().getFullYear(); let initialBadges: { id: string; name: string; embedHtml: string | null; imageUrl: string | null; linkUrl: string | null; sortOrder: number; }[] = []; try { initialBadges = await prisma.footerBadge.findMany({ where: { isActive: true }, orderBy: [{ sortOrder: "asc" }, { createdAt: "asc" }], select: { id: true, name: true, embedHtml: true, imageUrl: true, linkUrl: true, sortOrder: true, }, }); } catch { // Table may not exist yet during migrate; marquee client will retry via API. } return ( ); }