import { selectActiveProject } from "@/hooks/use-projects-hydrated";
import { resolveScheduleSeed } from "@/lib/scheduling/resolve-schedule";
import { resolveConnectedPublishPlatforms } from "@/lib/social/publish-platforms";
import { useProjectsStore } from "@/store/projects-store";
import type { GeneratePostRequest } from "@/types/workflow";

export function getPublishContext() {
  const state = useProjectsStore.getState();
  const project = selectActiveProject(state);
  const data = state.getActiveData();
  return {
    projectTimezone: project?.timezone ?? "UTC",
    projectCountries: project?.countries ?? [],
    postsPerDay: (data?.schedule.postsPerDay ?? 2) as 1 | 2,
    scheduleSeed: resolveScheduleSeed(project?.id ?? "", data?.schedule.scheduleSeed),
    scheduleSaved: data?.schedule.saved ?? false,
  };
}

export function getGenerationPayload(
  sequencePostId: string,
  mode?: "next" | "specific",
): (GeneratePostRequest & { mode?: "next" | "specific" }) | null {
  const state = useProjectsStore.getState();
  const project = selectActiveProject(state);
  if (!project?.id) return null;

  const data = state.getActiveData();
  if (!data?.brand || !data.context) return null;

  const connectedPlatforms = resolveConnectedPublishPlatforms(
    Array.isArray(data.accounts) ? data.accounts : [],
  );

  return {
    projectId: project.id,
    project,
    brand: { ...data.brand, companyName: data.brand.companyName || project.name },
    context: data.context,
    sequencePostId,
    connectedPlatforms,
    schedule: data.schedule,
    automation: data.automation,
    accounts: data.accounts,
    mode,
  };
}
