import { MetadataRoute } from "next";
import prisma from "@/lib/db";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
    const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://metalab.africa";

    const staticUrls: MetadataRoute.Sitemap = [
        { url: baseUrl, lastModified: new Date() },
        { url: `${baseUrl}/about`, lastModified: new Date() },
        { url: `${baseUrl}/projects`, lastModified: new Date() },
        { url: `${baseUrl}/blog`, lastModified: new Date() },
        { url: `${baseUrl}/services`, lastModified: new Date() },
        { url: `${baseUrl}/contact`, lastModified: new Date() },
    ];

    // If DATABASE_URL is not available (e.g. during Vercel build without env vars),
    // return only static URLs to avoid crashing the build.
    if (!process.env.DATABASE_URL) {
        return staticUrls;
    }

    try {
        const [projects, articles, services] = await Promise.all([
            prisma.project.findMany({ select: { id: true, updatedAt: true } }),
            prisma.article.findMany({ where: { published: true }, select: { id: true, updatedAt: true } }),
            (prisma as any).service.findMany({ select: { id: true, updatedAt: true } }),
        ]);

        const projectUrls = projects.map((p: any) => ({
            url: `${baseUrl}/projects/${p.id}`,
            lastModified: p.updatedAt,
        }));

        const articleUrls = articles.map((a: any) => ({
            url: `${baseUrl}/blog/${a.id}`,
            lastModified: a.updatedAt,
        }));

        const serviceUrls = services.map((s: any) => ({
            url: `${baseUrl}/services/${s.id}`,
            lastModified: s.updatedAt,
        }));

        return [
            ...staticUrls,
            ...projectUrls,
            ...articleUrls,
            ...serviceUrls,
        ];
    } catch (error) {
        console.warn("Sitemap: Could not fetch dynamic URLs from database:", error);
        return staticUrls;
    }
}
