import {queryClient} from '@config/queryClient';
import {PageData} from '@config/api';
import {useCursorInfinityQuery} from '@hooks/queries/useCursorInfinityQuery';
import {GROUP_QUERY_KEYS} from '@modules/group/constants';
import {getGroupScheduledPosts} from '@modules/group/services';
import {postQueryKeys} from '@modules/post/constants';
import {getScheduledPosts} from '@modules/post/services';
import {Post} from '@modules/post/interfaces';
import {deleteScheduledPost} from '@modules/post/utils';

import {useInfiniteQuery} from './queries/useInfiniteQuery';

export const useGetScheduledPosts = (groupId?: number) => {
  const feedQueryData = useCursorInfinityQuery({
    queryKey: postQueryKeys.scheduledPosts,
    queryFn: getScheduledPosts,
    options: {
      enabled: !groupId,
    },
  });

  const groupQueryData = useInfiniteQuery(
    GROUP_QUERY_KEYS.groupScheduledPosts(groupId!),
    params => getGroupScheduledPosts({id: groupId!, ...params}),
    {enabled: !!groupId},
  );

  const queryData = groupId ? groupQueryData : feedQueryData;

  const deleteScheduledPostFromCache = ({postId}: {postId: number}) => {
    if (groupId) {
      queryClient.setQueryData<PageData<Post> | undefined>(
        GROUP_QUERY_KEYS.groupScheduledPosts(groupId),
        oldData => {
          if (!oldData) return oldData;
          return {
            ...oldData,
            data: oldData.items?.filter(post => post.id !== postId),
          };
        },
      );
    } else {
      deleteScheduledPost(postId);
    }
  };

  return {...queryData, deleteScheduledPostFromCache};
};
