import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Button from 'Components/Link/Button';
import Link from 'Components/Link/Link';
import Menu from 'Components/Menu/Menu';
import MenuContent from 'Components/Menu/MenuContent';
import { sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import AddImportListPresetMenuItem from './AddImportListPresetMenuItem';
import styles from './AddImportListItem.css';

class AddImportListItem extends Component {

  //
  // Listeners

  onImportListSelect = () => {
    const {
      implementation,
      implementationName,
      minRefreshInterval
    } = this.props;

    this.props.onImportListSelect({ implementation, implementationName, minRefreshInterval });
  };

  //
  // Render

  render() {
    const {
      implementation,
      implementationName,
      minRefreshInterval,
      infoLink,
      presets,
      onImportListSelect
    } = this.props;

    const hasPresets = !!(presets && presets.length);

    return (
      <div
        className={styles.list}
      >
        <Link
          className={styles.underlay}
          onPress={this.onImportListSelect}
        />

        <div className={styles.overlay}>
          <div className={styles.name}>
            {implementationName}
          </div>

          <div className={styles.actions}>
            {
              hasPresets &&
                <span>
                  <Button
                    size={sizes.SMALL}
                    onPress={this.onImportListSelect}
                  >
                    {translate('Custom')}
                  </Button>

                  <Menu className={styles.presetsMenu}>
                    <Button
                      className={styles.presetsMenuButton}
                      size={sizes.SMALL}
                    >
                      {translate('Presets')}
                    </Button>

                    <MenuContent>
                      {
                        presets.map((preset) => {
                          return (
                            <AddImportListPresetMenuItem
                              key={preset.name}
                              name={preset.name}
                              implementation={implementation}
                              implementationName={implementationName}
                              minRefreshInterval={minRefreshInterval}
                              onPress={onImportListSelect}
                            />
                          );
                        })
                      }
                    </MenuContent>
                  </Menu>
                </span>
            }

            <Button
              to={infoLink}
              size={sizes.SMALL}
            >
              {translate('MoreInfo')}
            </Button>
          </div>
        </div>
      </div>
    );
  }
}

AddImportListItem.propTypes = {
  implementation: PropTypes.string.isRequired,
  implementationName: PropTypes.string.isRequired,
  minRefreshInterval: PropTypes.string.isRequired,
  infoLink: PropTypes.string.isRequired,
  presets: PropTypes.arrayOf(PropTypes.object),
  onImportListSelect: PropTypes.func.isRequired
};

export default AddImportListItem;
