"use client";

import { createContext, useContext, useState, useCallback } from "react";

type CreatePostState = {
  /** Optionally scope the new post to a group or page. */
  open: (community?: { id: string; name: string }) => void;
  community: { id: string; name: string } | null;
  postsVersion: number; // bumped every time a post is successfully created
};

const CreatePostContext = createContext<CreatePostState | null>(null);

export function CreatePostStateProvider({
  children,
  isOpen,
  setIsOpen,
  postsVersion,
}: {
  children: React.ReactNode;
  isOpen: boolean;
  setIsOpen: (v: boolean) => void;
  postsVersion: number;
}) {
  const [community, setCommunity] = useState<{ id: string; name: string } | null>(null);
  const open = useCallback(
    (c?: { id: string; name: string }) => {
      setCommunity(c ?? null);
      setIsOpen(true);
    },
    [setIsOpen]
  );
  return (
    <CreatePostContext.Provider value={{ open, community, postsVersion }}>
      {children}
    </CreatePostContext.Provider>
  );
}

export function useCreatePost() {
  const ctx = useContext(CreatePostContext);
  if (!ctx) throw new Error("useCreatePost must be used inside <CreatePostStateProvider>");
  return ctx;
}
