import { serialize } from '../../helpers/components';

export function isMobile() {
  if(typeof navigator === 'undefined') {
    return false;
  }
  return navigator?.userAgent?.match(/iPhone|iPad|iPod|Android/i);
}

function centerWindow(width: number, height: number) {
  if (typeof window === 'undefined') {
    return {
      top: 0,
      left: 0,
    };
  }

  const { screenLeft = 0, screenTop = 0, innerWidth, innerHeight } = window;

  const windowWidth = innerWidth
    ? innerWidth
    : document.documentElement.clientWidth
    ? document.documentElement.clientWidth
    : 0;

  const windowHeight = innerHeight
    ? innerHeight
    : document.documentElement.clientHeight
    ? document.documentElement.clientHeight
    : 0;

  return {
    top: windowHeight / 2 - height / 2 + screenTop,
    left: windowWidth / 2 - width / 2 + screenLeft,
  };
}

type SharerType = {
  url: string;
  message?: string;
  title?: string;
  image?: string;
  user?: string;
  type: string;
  phone?: string;
  width: number;
  height: number;
};

export default function Sharer({
  url,
  message,
  title,
  image,
  user,
  type,
  phone,
  width,
  height,
}: SharerType) {
  const args: any = {};
  const params: any = {};
  switch (type) {
    case 'facebook':
      params.u = encodeURIComponent(url);
      args.url = `https://www.facebook.com/sharer.php?${serialize(
        params,
        '&'
      )}`;
      args.title = 'Facebook Sharer';
      break;
    case 'twitter':
      params.text = message;
      params.url = url;
      args.height = 250;
      args.url = `https://twitter.com/share?${serialize(params, '&')}`;
      args.title = 'Twitter Sharer';
      break;
    case 'pinterest':
      params.url = url;
      if (image) {
        params.media = image;
      }
      args.url = `https://pinterest.com/pin/create/button/?${serialize(
        params,
        '&'
      )}`;
      args.title = 'Pinterest Sharer';
      break;
    case 'google':
    case 'gplus':
      params.url = url;
      args.url = `https://plus.google.com/share?${serialize(params, '&')}`;
      args.title = 'Google+ Sharer';
      args.width = 400;
      break;
    case 'linkedin':
      params.mini = true;
      params.url = url;
      params.title = message || title;
      args.url = `https://www.linkedin.com/shareArticle?${serialize(
        params,
        '&'
      )}`;
      args.title = 'Linkedin Sharer';
      break;
    case 'reddit':
      params.url = url;
      params.title = message || title;
      args.url = `https://www.reddit.com/submit?${serialize(params, '&')}`;
      args.title = '';
      args.width = 850;
      break;
    case 'whatsapp':
      params.phone = phone?.replace(/\+|(|)/gim, '');
      params.title = message || title;
      args.url = `https://api.whatsapp.com/send?${serialize(params, '&')}`;
      args.title = 'Whatsapp Message';
      args.width = 850;
      break;
    case 'messenger':
      args.url = `https://m.me/${user}`;
      args.title = 'Messenger Message';
      args.width = 850;
      break;
    case 'mail':
      args.url = `mailto:${url}`;
      args.title = '_self';
      break;
    case 'instagram':
      args.url = url;
      args.title = '_self';
      break;
    default:
      return args;
  }

  args.extra = serialize(
    {
      width: `${args.width || width}px`,
      height: `${args.height || height}px`,
      ...centerWindow(args.width || width, args.height || height),
    },
    ','
  );

  return args;
}
