import _ from 'lodash';
import {util} from '@appium/support';

export const decode = (
  input: string | {ELEMENT: string} | {[util.W3C_WEB_ELEMENT_IDENTIFIER]: string},
): string => {
  let base64String: string = ``;
  if (_.isString(input)) {
    base64String = input as string;
  } else if (_.has(input, util.W3C_WEB_ELEMENT_IDENTIFIER)) {
    base64String = input[util.W3C_WEB_ELEMENT_IDENTIFIER] as string;
  } else if (_.has(input, 'ELEMENT')) {
    // @ts-ignore TS2339
    base64String = input.ELEMENT as string;
  } else {
    throw new Error(
      `Input is expected to be a base64-encoded string or a valid element object. ` +
        `${JSON.stringify(input)} has been provided instead`,
    );
  }
  return Buffer.from(base64String, `base64`).toString();
};
