import Swal, { SweetAlertOptions } from "sweetalert2";
import "./sweetalert2.css";
import { TFunction } from "i18next";

export type SweetAlertTitle =  string | HTMLElement | JQuery | undefined
export type SweetAlertHtml = string | HTMLElement | JQuery | undefined
export type SweetAlertConfirmButtonText = string | undefined

type Transaction = TFunction<["translation", ...string[]], undefined>

export const msg = (title: SweetAlertTitle) => {
  Swal.mixin({
    toast: true,
    position: "bottom-end",
    showConfirmButton: false,
    timer: 3000,
    timerProgressBar: true,
    didOpen: (toast) => {
      toast.onmouseenter = Swal.stopTimer;
      toast.onmouseleave = Swal.resumeTimer;
    },
  }).fire({
    icon: "success",
    title: title,
  });
};

export const popup = (options: SweetAlertOptions) => {
  Swal.fire(options);
};

export const successDialog = (title: SweetAlertTitle, t: Transaction) => {
  return Swal.fire({
    icon: "success",
    title: title,
    confirmButtonText: t("Confirm"),
    showConfirmButton: true,
  });
};

export const successDialogWithContent = (title: SweetAlertTitle, html: SweetAlertHtml, t: Transaction) => {
  return Swal.fire({
    icon: "success",
    title: title,
    html: html,
    confirmButtonText: t("Confirm"),
    showConfirmButton: true,
  });
};

export const errorDialog = (title: SweetAlertTitle, t: Transaction) => {
  return Swal.fire({
    icon: "error",
    title: title,
    confirmButtonText: t("Confirm"),
    showConfirmButton: true,
  });
};

export const errorDialogWithContent = (title: SweetAlertTitle, html: SweetAlertHtml, t: Transaction) => {
  return Swal.fire({
    icon: "error",
    title: title,
    html: html,
    confirmButtonText: t("Confirm"),
    showConfirmButton: true,
  });
};

export const warningDialog = (title: SweetAlertTitle, t: Transaction) => {
  return Swal.fire({
    icon: "warning",
    title: title,
    confirmButtonText: t("Confirm"),
    showConfirmButton: true,
  });
};

export const submitDialog = async (
  confirmAction: () => void,
  t: Transaction,
  { ...props } = {
    title: t("Do you want to submit?") as SweetAlertTitle,
    confirmButtonText: t("Submit")  as SweetAlertConfirmButtonText,
  }
) => {
  // console.log(props)
  // const { t } = useTranslation("common")
  const result = await Swal.fire({
    icon: "question",
    title: props?.title,
    cancelButtonText: t("Cancel"),
    confirmButtonText: props?.confirmButtonText,
    showCancelButton: true,
    showConfirmButton: true,
    customClass: {
      container: "swal-container-class", // Add a custom class to the Swal.fire container element
      popup: "swal-popup-class", // Add a custom class to the Swal.fire popup element
    },
  });
  if (result.isConfirmed) {
    confirmAction();
  }
};

export const submitDialogWithWarning = async (
  confirmAction: () => void,
  t: Transaction,
  { ...props } = {
    title: t("Do you want to submit?") as SweetAlertTitle,
    html: t("Warning!") as SweetAlertHtml,
    confirmButtonText: t("Submit") as SweetAlertConfirmButtonText,
  }
) => {
  // console.log(props)
  // const { t } = useTranslation("common")
  const result = await Swal.fire({
    icon: "warning",
    title: props?.title,
    html: props?.html,
    cancelButtonText: t("Cancel"),
    confirmButtonText: props?.confirmButtonText,
    showCancelButton: true,
    showConfirmButton: true,
    customClass: {
      container: "swal-container-class", // Add a custom class to the Swal.fire container element
      popup: "swal-popup-class", // Add a custom class to the Swal.fire popup element
    },
  });
  if (result.isConfirmed) {
    confirmAction();
  }
};

export const deleteDialog = async (confirmAction: () => void, t: Transaction) => {
  // const { t } = useTranslation("common")
  const result = await Swal.fire({
    icon: "question",
    title: t("Do you want to delete?"),
    cancelButtonText: t("Cancel"),
    confirmButtonText: t("Delete"),
    showCancelButton: true,
    showConfirmButton: true,
    customClass: {
      container: "swal-container-class", // Add a custom class to the Swal.fire container element
      popup: "swal-popup-class", // Add a custom class to the Swal.fire popup element
    },
  });
  if (result.isConfirmed) {
    confirmAction();
  }
};
