import { ContractCall, Transaction } from "@src/models";

export type ModalIntegrationThemeStyles = {
  mainAccentLight?: string;
  mainAccentDark?: string;
  bgPrimary?: string;
  bgSecondary?: string;
  bgTertiary?: string;
  textPrimary?: string;
  textSecondary?: string;
  textTertiary?: string;
  textRed?: string;
  textOrange?: string;
  textGreen?: string;
  clickPrimary?: string;
  clickSecondary?: string;
  clickTertiary?: string;
  buttonPrBg?: string;
  buttonPrText?: string;
  buttonPrOffBg?: string;
  buttonPrOffText?: string;
  labelBg?: string;
  labelText?: string;
  successDark?: string;
  successLight?: string;
  infoDark?: string;
  infoLight?: string;
  warningDark?: string;
  warningLight?: string;
  errorDark?: string;
  errorLight?: string;
  chainlinkLogo?: string;
  fontFamily?: string;
};

export type ModalIntegrationStyles = Pick<
  ModalIntegrationThemeStyles,
  "mainAccentLight" | "mainAccentDark" | "textSecondary" | "fontFamily"
> & { width?: string };

export type ModalIntegrationPayload = {
  integratorId: string;
  dstChain?: string;
  dstToken?: string;
  srcChain?: string;
  srcToken?: string;
  customContractCalls?: ContractCall[];
  desc?: string;
  dstDisplayToken?: string;
  lightTheme?: boolean;
  defaultWalletPicker?: boolean;
  styles?: ModalIntegrationStyles;
  onPendingTransactionsChange?: (transactions: Transaction[]) => void;
  dstTokenLocked?: boolean;
  dstChainLocked?: boolean;
  srcTokenLocked?: boolean;
  srcChainLocked?: boolean;
  onDstTokenChange?: (
    token: { address: string; symbol: string } | undefined,
  ) => void;
  onDstChainChange?: (chain: string | undefined) => void;
  onSrcTokenChange?: (
    token: { address: string; symbol: string } | undefined,
  ) => void;
  onSrcChainChange?: (chain: string | undefined) => void;
  onConnectWallet?: () => void;
  bridge?: boolean;
  override?: {
    apiUrl?: string;
  };
  integratorFee?: number;
  integratorFeeReceiverAddress?: string;
  highlightedDstTokens?: string[];
};
