import type { ConnectedAccount } from "@/types/workflow";
import { canPublishToYouTube } from "@/lib/social/quick-publish";
import { getAccountHealth, isAccountPublishReady, isSimulatedToken } from "@/lib/social/token-validation";

const PUBLISH_PLATFORM_ORDER = ["linkedin", "facebook", "instagram"] as const;

export function isYouTubeAccountPublishReady(
  account: ConnectedAccount | undefined,
  post: { videoUrl?: string | null; videoStatus?: string },
): boolean {
  if (!account?.connected || getAccountHealth(account) !== "connected") return false;
  const token = account.accessToken;
  if (!token || isSimulatedToken(account)) return false;
  return canPublishToYouTube(post);
}

/** Connected platforms for post metadata (UI / generation — no server token required). */
export function resolveConnectedPublishPlatforms(
  accounts: ConnectedAccount[],
): string[] {
  return PUBLISH_PLATFORM_ORDER.filter((platform) => {
    const acc = accounts.find((a) => a.platform === platform);
    return Boolean(
      acc?.connected &&
        acc.connectionStatus !== "disconnected" &&
        acc.connectionStatus !== "expired",
    );
  });
}

/** Platforms that will receive auto-post / quick-publish (tokens validated). */
export function resolvePublishReadyPlatforms(
  accounts: ConnectedAccount[],
): string[] {
  return PUBLISH_PLATFORM_ORDER.filter((platform) => {
    const acc = accounts.find((a) => a.platform === platform);
    return acc && isAccountPublishReady(acc);
  });
}

/** LinkedIn + Facebook (+ YouTube when MP4 is ready). */
export function resolvePublishTargetsForPost(
  accounts: ConnectedAccount[],
  post: { videoUrl?: string | null; videoStatus?: string },
): string[] {
  const targets = resolvePublishReadyPlatforms(accounts);
  const yt = accounts.find((a) => a.platform === "youtube");
  if (isYouTubeAccountPublishReady(yt, post) && !targets.includes("youtube")) {
    targets.push("youtube");
  }
  return targets;
}
