import { eq } from "drizzle-orm";
import { getDb } from "./db";
import { services, blogPosts } from "../drizzle/schema";

export async function generateSitemap(baseUrl: string): Promise<string> {
  const db = await getDb();
  if (!db) {
    throw new Error("Database not available");
  }

  const urls: Array<{ loc: string; lastmod: string; priority: string }> = [];

  // Static pages
  urls.push(
    { loc: `${baseUrl}/`, lastmod: new Date().toISOString().split("T")[0], priority: "1.0" },
    { loc: `${baseUrl}/services`, lastmod: new Date().toISOString().split("T")[0], priority: "0.9" },
    { loc: `${baseUrl}/faq`, lastmod: new Date().toISOString().split("T")[0], priority: "0.8" },
    { loc: `${baseUrl}/gallery`, lastmod: new Date().toISOString().split("T")[0], priority: "0.8" },
    { loc: `${baseUrl}/blog`, lastmod: new Date().toISOString().split("T")[0], priority: "0.8" },
    { loc: `${baseUrl}/contact`, lastmod: new Date().toISOString().split("T")[0], priority: "0.9" }
  );

  // Dynamic service pages
  const allServices = await db.select().from(services).where(eq(services.isActive, true));

  allServices.forEach((service) => {
    urls.push({
      loc: `${baseUrl}/services/${service.slug}`,
      lastmod: service.updatedAt?.toISOString().split("T")[0] || new Date().toISOString().split("T")[0],
      priority: "0.8",
    });
  });

  // Dynamic blog pages
  const allBlogPosts = await db.select().from(blogPosts).where(eq(blogPosts.isPublished, true));

  allBlogPosts.forEach((post) => {
    urls.push({
      loc: `${baseUrl}/blog/${post.slug}`,
      lastmod: post.publishedAt?.toISOString().split("T")[0] || new Date().toISOString().split("T")[0],
      priority: "0.7",
    });
  });

  // Generate XML
  const xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urls.map((url) => `  <url>
    <loc>${url.loc}</loc>
    <lastmod>${url.lastmod}</lastmod>
    <priority>${url.priority}</priority>
  </url>`).join("\n")}
</urlset>`;

  return xml;
}
