import { getDb } from "./mongodb";
import { QuizTemplate } from "@/types/quiz";
import fs from "fs";
import path from "path";

const DATA_DIR = path.join(process.cwd(), "data");

function writeTemplateFile(template: QuizTemplate): void {
  try {
    const filePath = path.join(DATA_DIR, `template-${template.id}.json`);
    fs.writeFileSync(filePath, JSON.stringify(template, null, 2));
  } catch {
    // Non-critical: file write may fail in Docker (read-only fs)
  }
}

function deleteTemplateFile(id: string): void {
  try {
    const filePath = path.join(DATA_DIR, `template-${id}.json`);
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
    }
  } catch {
    // Non-critical
  }
}

export async function getAllTemplates(): Promise<QuizTemplate[]> {
  const db = await getDb();
  return db.collection("templates").find().toArray() as unknown as QuizTemplate[];
}

export async function getTemplate(id: string): Promise<QuizTemplate | null> {
  const db = await getDb();
  return db.collection("templates").findOne({ id }) as unknown as QuizTemplate | null;
}

export async function saveTemplate(template: QuizTemplate): Promise<void> {
  const db = await getDb();
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  const { _id, ...doc } = template as QuizTemplate & { _id?: unknown };
  await db.collection("templates").updateOne(
    { id: template.id },
    { $set: doc },
    { upsert: true }
  );
  writeTemplateFile(template);
}

export async function deleteTemplate(id: string): Promise<boolean> {
  const db = await getDb();
  const result = await db.collection("templates").deleteOne({ id });
  deleteTemplateFile(id);
  return result.deletedCount > 0;
}
