let running = false;
let lastRunAt: string | null = null;
let lastJobId: string | null = null;

export function isAutoPostRunInProgress(): boolean {
  return running;
}

export function getAutoPostLockState() {
  return { running, lastRunAt, lastJobId };
}

/** Ensures only one scheduled-publish run executes at a time (no duplicate workers). */
export async function withAutoPostLock<T>(
  jobId: string,
  fn: () => Promise<T>,
): Promise<{ ok: true; result: T } | { ok: false; reason: string }> {
  if (running) {
    return { ok: false, reason: "Another auto-post job is already running" };
  }

  running = true;
  lastJobId = jobId;
  lastRunAt = new Date().toISOString();

  try {
    const result = await fn();
    return { ok: true, result };
  } finally {
    running = false;
  }
}
