import { convertStoryPayloadToRaw } from '~/storyRepository/utils/convertStoryPayloadToRaw';
import { ingestInCache } from '~/cache/api/ingestInCache';

const saveOptimisticToCache = (payload: Amity.StoryCreatePayload) => {
  const optimisticData = convertStoryPayloadToRaw(payload);
  ingestInCache(optimisticData);
  return optimisticData;
};

export const createOptimisticEvent = (
  {
    payload,
    formData = undefined,
    isVideo = false,
  }: {
    payload: Amity.StoryCreatePayload;
    formData?: FormData;
    isVideo?: boolean;
  },
  callback: (optimisticData: Amity.StoryPayload) => void,
) => {
  if (formData) {
    const files = formData.getAll('files');
    const fileObject = (files[0] as File & { uri: string }) || undefined;

    if (!fileObject) return;

    const optimisticData = {
      ...payload,
      data: {
        ...payload.data,
        fileId: undefined,
        fileData: fileObject.uri,
      },
    };

    if (isVideo) {
      optimisticData.data.videoFileId = { original: undefined };
    }

    return callback(saveOptimisticToCache(optimisticData));
  }

  return callback(
    saveOptimisticToCache({
      ...payload,
      data: {
        ...payload.data,
        fileData: null,
      },
    }),
  );
};
