import moment from 'moment';
import React from 'react';

import { isNully } from '../utils/Common';

export default function UpdateSettings({ update }) {
  const settings = update.update.instructions.settings;

  return (<div>
    <table className='update-settings'>
      <tbody>
        <UpdateStrategy strategy={settings.updateStrategy} />
        <tr>
          <td>Max Failures Per Instance</td>
          <td>{settings.maxPerInstanceFailures}</td>
        </tr>
        <tr>
          <td>Max Failed Instances</td>
          <td>{settings.maxFailedInstances}</td>
        </tr>
        <tr>
          <td>Minimum Waiting Time in Running</td>
          <td>{moment.duration(settings.minWaitInInstanceRunningMs).humanize()}</td>
        </tr>
        <tr>
          <td>Rollback On Failure?</td>
          <td>{settings.rollbackOnFailure ? 'yes' : 'no'}</td>
        </tr>
        <tr>
          <td>SLA-Aware?</td>
          <td>{settings.slaAware ? 'yes' : 'no'}</td>
        </tr>
      </tbody>
    </table>
  </div>);
}

// ESLint doesn't like React's new adjacent elements, so we need to disable it here
/* eslint-disable */
function UpdateStrategy({ strategy }) {
  if (isNully(strategy)) {
    return null;
  }

  if (!isNully(strategy.queueStrategy)) {
    return [<tr>
      <td>Strategy</td>
      <td>Queue</td>
    </tr>,
    <tr>
      <td>Max Parallel Updates</td>
      <td>{ strategy.queueStrategy.groupSize }</td>
    </tr>];
  } else if (!isNully(strategy.batchStrategy)) {
    return [<tr>
      <td>Strategy</td>
      <td>Batch</td>
    </tr>,
    <tr>
      <td>Batch Size</td>
      <td>{ strategy.batchStrategy.groupSize }</td>
    </tr>];
  } else if (!isNully(strategy.varBatchStrategy)) {
    return [<tr>
      <td>Strategy</td>
      <td>Variable Batch</td>
    </tr>,
    <tr>
      <td>Batch Sizes</td>
      <td>{ strategy.varBatchStrategy.groupSizes.toString() }</td>
    </tr>];
  }

  return null;
}

/* eslint-enable */
