import type { Ref } from 'vue';

import { computed, ref } from 'vue';

import { getFileNameFromUrl, getFileType } from '@vben/utils';

export function useFilePreview() {
  const visible = ref(false);
  const fileUrl = ref('');
  const fileName = ref('');

  const fileType = computed(() => getFileType(fileName.value || fileUrl.value));

  function openPreview(url: string, name?: string) {
    fileUrl.value = url;
    fileName.value = name || getFileNameFromUrl(url);
    visible.value = true;
  }

  function closePreview() {
    visible.value = false;
  }

  return {
    closePreview,
    openPreview,
    previewState: {
      fileUrl: fileUrl as Ref<string>,
      fileName: fileName as Ref<string>,
      fileType,
      visible: visible as Ref<boolean>,
    },
  };
}
