import type { MetadataRoute } from "next";
import { prisma } from "@/lib/db";

export const dynamic = "force-dynamic";
export const revalidate = 600;

const SITE = process.env.NEXT_PUBLIC_SITE_URL ?? "https://v2.finzone.io.vn";

type RobotsRule = {
  userAgent: string | string[];
  allow?: string | string[];
  disallow?: string | string[];
  crawlDelay?: number;
};

const DEFAULT_RULES: RobotsRule[] = [
  {
    userAgent: "*",
    allow: "/",
    disallow: ["/api/", "/admin", "/admin/", "/login"],
  },
];

async function loadRules(): Promise<RobotsRule[]> {
  try {
    const setting = await prisma.setting.findUnique({
      where: { key: "seo.robots_rules" },
    });
    if (!setting?.value) return DEFAULT_RULES;
    const parsed = JSON.parse(setting.value) as RobotsRule[];
    return Array.isArray(parsed) && parsed.length ? parsed : DEFAULT_RULES;
  } catch {
    return DEFAULT_RULES;
  }
}

async function loadHost(): Promise<string> {
  try {
    const setting = await prisma.setting.findUnique({
      where: { key: "seo.robots_host" },
    });
    return setting?.value || SITE;
  } catch {
    return SITE;
  }
}

export default async function robots(): Promise<MetadataRoute.Robots> {
  const [rules, host] = await Promise.all([loadRules(), loadHost()]);
  return {
    rules,
    sitemap: `${SITE}/sitemap.xml`,
    host,
  };
}
