/**
 * Publicera AI-receptöversättningar som klarat den inbyggda verifieringen
 * (verification.ok = true). Endast PUBLICERADE översättningar visas för
 * användare. Utkast som föll på verifieringen lämnas kvar för manuell
 * granskning i admin (så inget felöversatt går live automatiskt).
 *
 * Kör EFTER att translate-recipes.ts-kön har tömts:
 *   pnpm --filter @app/worker exec tsx scripts/publish-translations.ts es
 *   pnpm --filter @app/worker exec tsx scripts/publish-translations.ts all
 *
 * Kräver DATABASE_URL i miljön.
 */
import { config as loadDotenv } from "dotenv";
import { existsSync } from "node:fs";
import path from "node:path";
import { and, eq, sql } from "drizzle-orm";
import { createDatabase, schema } from "@app/database";

// Ladda .env (samma sökning som worker/seed) så DATABASE_URL finns även när
// skriptet körs fristående via `pnpm exec tsx`.
for (const candidate of [".env", "../.env", "../../.env"]) {
  const p = path.resolve(process.cwd(), candidate);
  if (existsSync(p)) {
    loadDotenv({ path: p });
    break;
  }
}

async function main() {
  if (!process.env.DATABASE_URL) throw new Error("Sätt DATABASE_URL.");
  const arg = (process.argv[2] ?? "all").toLowerCase();
  const { db, pool } = createDatabase(process.env.DATABASE_URL);

  const cond = [
    eq(schema.recipeTranslations.status, "draft_ai"),
    sql`${schema.recipeTranslations.verification}->>'ok' = 'true'`,
  ];
  if (arg !== "all") cond.push(eq(schema.recipeTranslations.languageTag, arg));

  const published = await db
    .update(schema.recipeTranslations)
    .set({ status: "published", updatedAt: new Date() })
    .where(and(...cond))
    .returning({ id: schema.recipeTranslations.id });

  const [remaining] = await db
    .select({ n: sql<number>`count(*)::int` })
    .from(schema.recipeTranslations)
    .where(eq(schema.recipeTranslations.status, "draft_ai"));

  console.log(`Publicerade ${published.length} verifierade översättningar (${arg}).`);
  console.log(
    `Kvar som utkast (föll på verifieringen – granska i admin vid behov): ${remaining?.n ?? 0}.`,
  );
  await pool.end();
}
main().then(
  () => process.exit(0),
  (e) => {
    console.error(e);
    process.exit(1);
  },
);
