import { DISPATCH_REQUEST_REFRESH } from './../../scripts/html/bodyScript';
import type WebView from 'react-native-webview';
import type { UNCardComponentProps } from './UNCardComponent';
import type { RequestRefreshEvent } from '../../messages/webMessages/unitComponentsMessages';
import type { UNCardMenuAction } from '../../types/shared';
import { WebComponentType } from '../../types/internal/webComponent.types';
import { UnitComponentsSDK } from '../../unitComponentsSdkManager/UnitComponentsSdkManager';

export const getCardParams = (props: UNCardComponentProps) => {
  const menuItemsParam = props.menuItems ? `menu-items="${props.menuItems.join()}"` : '';
  const feeParam = props.fee ? `fee="${props.fee}"` : '';
  return `
    card-id="${props.cardId}"
    enable-mobile-wallet="${!!(props.pushProvisioningModule || UnitComponentsSDK.getPushProvisionModule())}"
    hide-actions-menu-button="${props.hideActionsMenuButton || false}"
    hide-card-title="${props.hideCardTitle || false}"
    hide-sensitive-data-button="${props.hideSensitiveDataButton || false}"
    learn-more-url="${props.learnMoreUrl || ''}"
    ${feeParam}
    ${menuItemsParam}
  `;
};

export const getCardScript = () => {
  return DISPATCH_REQUEST_REFRESH;
};

export const injectOpenActionsMenuScript = (currentWeb: WebView | null) => {
  currentWeb?.injectJavaScript(`dispatchOpenActionsMenu('${WebComponentType.card}')`);
};

export const injectRequestCardActionScript = (currentWeb: WebView | null, action: UNCardMenuAction) => {
  currentWeb?.injectJavaScript(`dispatchRequestCardAction('${action}')`);
};

export const injectRequestHideSensitiveDataScript = (currentWeb: WebView | null) => {
  currentWeb?.injectJavaScript(`dispatchRequestHideSensitiveData('${WebComponentType.card}')`);
};

export const injectRequestShowSensitiveDataScript = (currentWeb: WebView | null) => {
  currentWeb?.injectJavaScript(`dispatchRequestShowSensitiveData('${WebComponentType.card}')`);
};
export const injectRefreshEventIfNeeded = (currentWeb: WebView | null, requestRefreshEvent: RequestRefreshEvent | null, cardId: string) => {
  if (requestRefreshEvent && requestRefreshEvent.dependencies.includes(WebComponentType.card.valueOf()) && requestRefreshEvent.resourceId == cardId) {
    currentWeb?.injectJavaScript(`dispatchRefreshEvent('${JSON.stringify(requestRefreshEvent)}')`);
  }
};
