import { getActiveAccountProfile } from "@/lib/account-context";
import { accountHasThreadsToken } from "@/lib/threads-api";
import { probeSession } from "@/lib/threads-browser";

export async function requireActiveThreadsAuth() {
  const account = await getActiveAccountProfile();
  if (!account || !accountHasThreadsToken(account)) {
    return {
      ok: false as const,
      error: "目前帳號尚未綁定 Threads 官方 API，請先到側欄完成綁定",
    };
  }
  return { ok: true as const, account };
}

/** 發文：官方 API 或有效瀏覽器 session 擇一即可。 */
export async function requirePublishAuth() {
  const account = await getActiveAccountProfile();
  if (!account) {
    return {
      ok: false as const,
      error: "請先在側欄選擇或建立經營帳號",
    };
  }

  if (accountHasThreadsToken(account)) {
    return { ok: true as const, account, via: "api" as const };
  }

  if (!account.storageState) {
    return {
      ok: false as const,
      error:
        "此帳號尚未有 Threads 瀏覽器 session。請到「連線設定」頁用 Chrome 擴充同步。",
    };
  }

  const valid = await probeSession(account.storageState);
  if (!valid) {
    return {
      ok: false as const,
      error: "Threads 瀏覽器 session 已失效，請重新匯入或在本機重新登入後傳到 server。",
    };
  }

  return { ok: true as const, account, via: "browser" as const };
}