import { HttpError } from "./api";
import { notify } from "./notifications";
import i18n from "../i18n";

// A YouTube-gated action (subscribe, sync, backfill, unsubscribe) that 403s means the user hasn't
// granted the write scope — surface a "Connect" affordance instead of a vague failure. Pass
// `onConnect` to offer the connect-wizard button (callers that have no wizard handle, e.g. the
// channel page, just get the message). `fallbackMessage` is the already-translated non-403 error.
export function notifyYouTubeActionError(
  err: unknown,
  fallbackMessage: string,
  onConnect?: () => void,
): void {
  const httpErr = err instanceof HttpError ? err : null;
  if (httpErr?.status === 403) {
    // A 403 on a YouTube write action means the write scope isn't granted — offer to connect.
    notify({
      level: "error",
      message: i18n.t("channels.notify.needYouTube"),
      action: onConnect
        ? { label: i18n.t("channels.notify.connect"), onClick: onConnect }
        : undefined,
    });
    return;
  }
  // Any other error: prefer the server's own reason (e.g. "Not enough quota left today") over the
  // caller's generic fallback — the useful detail was being discarded (U-3.2.8).
  notify({ level: "error", message: httpErr?.detail || fallbackMessage });
}
