import React from 'react';
import { HelpPopoverProps } from './HelpPopover.js';
import '@bigbinary/neetoui';

type MoreOptions = {
  title: string;
  link: string;
  path: string;
  icon: React.ReactNode;
  onClick?: Function;
  dataTestid: string;
  description?: string | React.ReactNode;
  element: React.ReactNode | React.ElementType;
  helpPopoverProps?: HelpPopoverProps;
};
type RegenerateConfig = {
  expiresInOptions: Array<{
    label: string;
    value: string;
  }>;
  helpUrl: string;
};
/**
 *
 * A common component to share the link in multiple ways.
 *
 * ![ShareViaLink](https://user-images.githubusercontent.com/35304653/261649701-932f0cbe-4e63-4041-957b-49ee67be7055.png|height=200|width=300)
 *
 * Regenerate URL enabled
 *
 * @example 
 *
 * import { useRegenerateUrl } from "hooks/reactQuery/useQuizzesApi";
 * import ShareViaLink from "@bigbinary/neeto-molecules/ShareViaLink";
 * 
 * const Share = ({ quiz }) => {
 *   const { mutate: regenerateURL, isPending: isRegenerating } =
 *     useRegenerateUrl();
 * 
 *   return (
 *     <ShareViaLink
 *       enabledOptions={{ regenerate: true }}
 *       entity={quiz}
 *       entityName="quiz"
 *       handleRegenerate={regenerateURL}
 *       isLoading={isRegenerating}
 *       socialMediaProps={{ postTitle: "Hi, can you please attend this quiz?" }}
 *       url={quizUrl}
 *     />
 *   );
 * };
 * @endexample
 * Regenerate URL and Edit URL enabled
 *
 * @example 
 *
 * import { useRegenerateUrl, useUpdateUrl } from "hooks/reactQuery/useQuizzesApi";
 * import ShareViaLink from "@bigbinary/neeto-molecules/ShareViaLink";
 * 
 * const Share = ({ quiz }) => {
 *   const { mutate: regenerateURL, isPending: isRegenerating } =
 *     useRegenerateUrl();
 * 
 *   const { mutate: updateUrl, isPending: isUpdating } = useUpdateUrl();
 * 
 *   return (
 *     <ShareViaLink
 *       editUrlProps={{
 *         prefix: `${window.location.origin}/`,
 *         editablePath: window.location.pathname,
 *       }}
 *       enabledOptions={{ regenerate: true, edit: true }}
 *       entity={quiz}
 *       entityName="quiz"
 *       handleEdit={updateUrl}
 *       handleRegenerate={regenerateURL}
 *       isLoading={isRegenerating || isUpdating}
 *       socialMediaProps={{ postTitle: "Hi, can you please attend this quiz?" }}
 *       url={quizUrl}
 *     />
 *   );
 * };
 * @endexample
 * Regenerate URL and Edit URL disabled
 *
 * @example 
 *
 * import ShareViaLink from "@bigbinary/neeto-molecules/ShareViaLink";
 * 
 * const Share = ({ quiz }) => (
 *   <ShareViaLink
 *     entity={quiz}
 *     entityName="quiz"
 *     socialMediaProps={{ postTitle: "Hi, can you please attend this quiz?" }}
 *     url={quizUrl}
 *   />
 * );
 * @endexample
 * With preview URL
 *
 * @example 
 *
 * import ShareViaLink from "@bigbinary/neeto-molecules/ShareViaLink";
 * 
 * const Share = ({ quiz }) => (
 *   <ShareViaLink
 *     entity={quiz}
 *     entityName="quiz"
 *     previewUrl={quizPreviewUrl}
 *     socialMediaProps={{ postTitle: "Hi, can you please attend this quiz?" }}
 *     url={quizUrl}
 *   />
 * );
 * @endexample
 * With more share options
 *
 * @example 
 *
 * import ShareViaLink from "@bigbinary/neeto-molecules/ShareViaLink";
 * import { Message, Notification } from "neetoicons";
 * 
 * const Share = ({ quiz }) => (
 *   <ShareViaLink
 *     entity={quiz}
 *     entityName="quiz"
 *     previewUrl={quizPreviewUrl}
 *     socialMediaProps={{ postTitle: "Hi, can you please attend this quiz?" }}
 *     url={quizUrl}
 *     moreOptions={[
 *       {
 *         title: "Notify users",
 *         onClick: () => {
 *           alert("Notified users");
 *         },
 *         icon: Notification,
 *         dataTestid: "notify-users",
 *         description: "Users will be notified.",
 *         helpPopoverProps: {
 *           title,
 *           description,
 *           helpLinkProps: { href: HELP_DOC_URL },
 *         },
 *       },
 *     ]}
 *   />
 * );
 * @endexample
*/
declare const ShareViaLink: React.FC<{
  title: string | React.ReactNode;
  description?: string | React.ReactNode;
  customTopContent?: React.ReactNode;
  customBottomContent?: React.ReactNode;
  isLoading?: boolean;
  enabledOptions?: {
    regenerate?: boolean | RegenerateConfig;
    edit?: boolean;
  };
  entity: {
    id: string;
    name: string;
  };
  entityName: string;
  handleEdit?: Function;
  handleRegenerate?: Function;
  socialMediaProps: {
    cardTitle?: string | React.ReactNode;
    cardDescription?: string | React.ReactNode;
    pageTitle?: string | React.ReactNode;
    pageDescription?: string | React.ReactNode;
    postTitle?: string;
  };
  qrCodeProps: {
    cardTitle?: string | React.ReactNode;
    cardDescription?: string | React.ReactNode;
    pageTitle?: string | React.ReactNode;
    pageDescription?: string | React.ReactNode;
  };
  moreOptions?: MoreOptions[];
  disableShareSocialMedia?: boolean;
  disableQRDownload?: boolean;
  urls: {
    prefix?: string;
    editablePath?: string;
    maxLength?: number;
    url: string;
    previewUrl?: string;
  }[];
}>;

export { ShareViaLink as default };
