"use client";

import { useMemo } from "react";
import type { PostingContextData, PostSequenceItem } from "@/types/workflow";
import { selectActiveContext, selectActiveSelectedPostId } from "./project-selectors";
import { useProjectsStore } from "./projects-store";

interface ContextStore {
  context: PostingContextData;
  selectedPostId: string | null;
  setContextName: (name: string) => void;
  setPosts: (posts: PostSequenceItem[]) => void;
  addPost: () => void;
  updatePost: (id: string, data: Partial<PostSequenceItem>) => void;
  removePost: (id: string) => void;
  selectPost: (id: string | null) => void;
  saveContext: () => void;
}

function useContextStoreImpl(): ContextStore;
function useContextStoreImpl<T>(selector: (state: ContextStore) => T): T;
function useContextStoreImpl<T>(selector?: (state: ContextStore) => T): T | ContextStore {
  const context = useProjectsStore(selectActiveContext);
  const selectedPostId = useProjectsStore(selectActiveSelectedPostId);
  const setContextName = useProjectsStore((s) => s.setActiveContextName);
  const setPosts = useProjectsStore((s) => s.setActivePosts);
  const addPost = useProjectsStore((s) => s.addActivePost);
  const updatePost = useProjectsStore((s) => s.updateActivePost);
  const removePost = useProjectsStore((s) => s.removeActivePost);
  const selectPost = useProjectsStore((s) => s.selectActivePost);
  const saveContext = useProjectsStore((s) => s.saveActiveContext);

  const store = useMemo(
    (): ContextStore => ({
      context,
      selectedPostId,
      setContextName,
      setPosts,
      addPost,
      updatePost,
      removePost,
      selectPost,
      saveContext,
    }),
    [
      context,
      selectedPostId,
      setContextName,
      setPosts,
      addPost,
      updatePost,
      removePost,
      selectPost,
      saveContext,
    ],
  );

  return selector ? selector(store) : store;
}

export const useContextStore = useContextStoreImpl;
