import {
  ModalTypes,
  OpenModalWithDataFn,
} from '@/components/modal/constants/ModalTypes';
import { toast } from '@/components/toast/Toast';
import { ToastV2Props } from '@/components/toast/ToastV2';
import logWebUserEvent from '@/logging/logWebUserEvent';
import { Clip } from '@/state/clipStore';
import { SessionStore } from '@/state/sessionStore';
import { shareClip } from '@/utils/download';

export const showPublicSongToast = ({
  clip,
  session,
  openModalWithData,
}: {
  clip: Clip;
  session: SessionStore;
  openModalWithData: OpenModalWithDataFn;
}) => {
  const isUserSongOwner =
    session?.userId !== undefined && clip?.user_id === session?.userId;
  const handleShareClick = () => {
    logWebUserEvent({
      actionName: 'PublicToastShareClicked',
      context: {
        clipId: clip?.id,
        isUserSongOwner,
      },
    });
    openModalWithData(
      ModalTypes.SHARE_CLIP,
      { clipId: clip.id },
      'PublishSuccess'
    );
    session.clearTooltipOnShare();
  };

  toast({
    title: 'Song is now public!',
    description: 'Your song is live and discoverable',
    duration: 2000,
    actionText: 'Share',
    onActionClick: handleShareClick,
  } as ToastV2Props);
};

export const showLinkOnlyToast = ({
  clip,
  session,
}: {
  clip: Clip;
  session: SessionStore;
}) => {
  const isUserSongOwner =
    session?.userId !== undefined && clip?.user_id === session?.userId;
  const handleCopyLinkClick = () => {
    logWebUserEvent({
      actionName: 'PublicToastCopyLinkClicked',
      context: {
        clipId: clip?.id,
        isUserSongOwner,
      },
    });
    shareClip(session.apiClient, clip);
    session.clearTooltipOnShare();
  };
  toast({
    title: 'Song is now link only',
    description: "This song won't appear in search or feeds",
    duration: 2000,
    actionText: 'Copy Link',
    onActionClick: handleCopyLinkClick,
  } as ToastV2Props);
};

export const showErrorToast = () => {
  toast({
    title: 'Error',
    description: 'An error occurred while updating your settings.',
    status: 'error',
    duration: 3000,
    isClosable: true,
  });
};
