// @flow
import * as PAGES from 'constants/pages';
import * as MODALS from 'constants/modal_types';
import React from 'react';
import Button from 'component/button';
import { withRouter } from 'react-router';
import { FormField } from 'component/common/form';

type Props = {
  setSyncEnabled: boolean => void,
  syncEnabled: boolean,
  verifiedEmail: ?string,
  history: { push: string => void },
  location: UrlLocation,
  getSyncError: ?string,
  disabled: boolean,
  openModal: (string, any) => void,
};

function SyncToggle(props: Props) {
  const {
    verifiedEmail,
    getSyncError,
    history,
    location: { pathname },
    openModal,
    syncEnabled,
    disabled,
  } = props;

  if (getSyncError) {
    history.push(`/$/${PAGES.AUTH}?redirect=${pathname}&immediate=true`);
    return null;
  }

  return (
    <div>
      {!verifiedEmail ? (
        <div>
          <Button requiresAuth button="primary" label={__('Add Email')} />
          <p className="help">{__('An email address is required to sync your account.')}</p>
        </div>
      ) : (
        <FormField
          type="checkbox"
          name="sync_toggle"
          label={__('Sync your balance and preferences across devices.')}
          checked={syncEnabled}
          onChange={() => openModal(MODALS.SYNC_ENABLE, { mode: syncEnabled ? 'disable' : 'enable' })}
          disabled={disabled}
        />
      )}
    </div>
  );
}

export default withRouter(SyncToggle);
