// src/lib/backlink/dr-actions.ts — super-admin god-mode actions for DR refresh.
"use server";
import { eq, isNull, lt, or } from "drizzle-orm";
import { assertSuperAdmin } from "@/lib/auth/super-admin";
import { db } from "@/lib/db/client";
import { domainRatings, linkSources } from "@/lib/db/domain-schema";
import { fetchDomainRating } from "./ahrefs-dr";
import { type DrChunkResult, runDrChunk } from "./dr-chunk";

/** Distinct source domains missing a DR or older than `maxAgeDays`. Super-admin only. */
export async function fetchStaleDomainsAction(
  maxAgeDays = 30,
): Promise<string[]> {
  await assertSuperAdmin();
  const cutoff = new Date(Date.now() - maxAgeDays * 86_400_000);
  const rows = await db
    .selectDistinct({ domainNorm: linkSources.domainNorm })
    .from(linkSources)
    .leftJoin(
      domainRatings,
      eq(domainRatings.domainNorm, linkSources.domainNorm),
    )
    .where(
      or(isNull(domainRatings.domainNorm), lt(domainRatings.fetchedAt, cutoff)),
    );
  return rows.map((r) => r.domainNorm);
}

/** Fetch + cache DR for a chunk of domains. Super-admin only. */
export async function fetchDomainRatingsChunkAction(
  domains: string[],
): Promise<DrChunkResult> {
  await assertSuperAdmin();
  if (domains.length === 0)
    return { updated: 0, rateLimited: false, failed: [] };
  return runDrChunk(domains, fetchDomainRating);
}
