import { createStore } from "zustand/vanilla";
import { useStore } from "zustand";
import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";

export interface ConfirmationDialogState {
  isDialogVisible: boolean;
  messages: string;
  confirmAction: () => void;
  cancelAction: () => void;
  showDialog: () => void;
  hideDialog: () => void;
  toggleDialog: () => void;
  setConfirmAction: (action: () => void) => void;
  setCancelAction: (action: () => void) => void;
  setMessages: (messages: string) => void;
}

export const confirmationDialogStore = createStore<ConfirmationDialogState>(
  (set) => ({
    isDialogVisible: false,
    messages: "",
    confirmAction: noop,
    cancelAction: () => noop,
    showDialog: () => set({ isDialogVisible: true }),
    hideDialog: () => set({ isDialogVisible: false }),
    toggleDialog: () =>
      set((state) => ({ isDialogVisible: !state.isDialogVisible })),
    setConfirmAction: (action) => set({ confirmAction: action }),
    setCancelAction: (action) => set({ cancelAction: action }),
    setMessages: (messages) => set({ messages }),
  })
);

export const useConfirmationDialog = (
  selector?: (state: ConfirmationDialogState) => any
) => useStore(confirmationDialogStore, selector);
