import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
import { mapSlugToFileSlug } from './slugs';

export interface PageFrontmatter {
  title: string;
  excerpt: string;
  featuredImage: string | null;
  locale: string;
}

export interface PageMdx {
  slug: string;
  frontmatter: PageFrontmatter;
  content: string;
}

export async function getPageBySlug(slug: string, locale: string): Promise<PageMdx | null> {
  // Map translated slug to file slug
  const fileSlug = await mapSlugToFileSlug(slug, locale);
  const pagesDir = path.join(process.cwd(), 'data', 'pages', locale);
  const filePath = path.join(pagesDir, `${fileSlug}.mdx`);

  if (!fs.existsSync(filePath)) {
    return null;
  }

  const fileContent = fs.readFileSync(filePath, 'utf8');
  const { data, content } = matter(fileContent);

  return {
    slug: fileSlug,
    frontmatter: data as PageFrontmatter,
    content,
  };
}

export async function getAllPages(locale: string): Promise<PageMdx[]> {
  const pagesDir = path.join(process.cwd(), 'data', 'pages', locale);
  if (!fs.existsSync(pagesDir)) return [];

  const files = fs.readdirSync(pagesDir);
  const pages = await Promise.all(
    files
      .filter((file) => file.endsWith('.mdx'))
      .map((file) => {
        const fileSlug = file.replace(/\.mdx$/, '');
        const filePath = path.join(pagesDir, file);
        const fileContent = fs.readFileSync(filePath, 'utf8');
        const { data, content } = matter(fileContent);
        return {
          slug: fileSlug,
          frontmatter: data as PageFrontmatter,
          content,
        };
      }),
  );

  return pages.filter((p): p is PageMdx => p !== null);
}

export async function getAllPagesMetadata(locale: string): Promise<Partial<PageMdx>[]> {
  const pagesDir = path.join(process.cwd(), 'data', 'pages', locale);
  if (!fs.existsSync(pagesDir)) return [];

  const files = fs.readdirSync(pagesDir);
  return files
    .filter((file) => file.endsWith('.mdx'))
    .map((file) => {
      const fileSlug = file.replace(/\.mdx$/, '');
      const filePath = path.join(pagesDir, file);
      const fileContent = fs.readFileSync(filePath, 'utf8');
      const { data } = matter(fileContent);
      return {
        slug: fileSlug,
        frontmatter: data as PageFrontmatter,
      };
    });
}
