// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

import PropTypes from 'prop-types';
import React from 'react';
import Form from 'react-bootstrap/Form';


export default class AnalyzerDropdown extends React.Component {
  static defaultProps = {
    defaultSelected: 'standard',
    label: 'Type',
    id: 'analyzer-default',
    classes: '',
    onChange: function () { }
  };
  static propTypes = {
    defaultSelected: PropTypes.string.isRequired,
    label: PropTypes.string.isRequired,
    id: PropTypes.string.isRequired,
    classes: PropTypes.string.isRequired,
    onChange: PropTypes.func.isRequired
  };

  getAnalyzers = () => {
    const analyzers = [
      'Standard', 'Keyword', 'Simple', 'Whitespace', 'Classic', 'Email'
    ];
    return analyzers.map((i) => {
      return (<option value={i.toLowerCase()} key={i}>{i}</option>);
    });
  };

  getLanguages = () => {
    const languages = [
      'Arabic', 'Armenian', 'Basque', 'Bulgarian', 'Brazilian', 'Catalan', 'Cjk', 'Chinese', 'Czech',
      'Danish', 'Dutch', 'English', 'Finnish', 'French', 'Galician', 'German', 'Greek', 'Hindi', 'Hungarian',
      'Indonesian', 'Irish', 'Italian', 'Japanese', 'Latvian', 'Norwegian', 'Persian', 'Polish', 'Portuguese',
      'Romanian', 'Russian', 'Spanish', 'Swedish', 'Thai', 'Turkish'
    ];
    return languages.map((lang) => {
      return (<option value={lang.toLowerCase()} key={lang}>{lang}</option>);
    });
  };

  getLabel = () => {
    return this.props.label === '' ? null : <label htmlFor={this.props.id}>{this.props.label}</label>;
  };

  render() {
    const languages =
      <optgroup label="Language-specific" key="languages">
        {this.getLanguages()}
      </optgroup>;

    return (
      <div className={this.props.classes}>
        {this.getLabel()}
        <Form.Select
          onChange={this.props.onChange}
          value={this.props.defaultSelected}
          id={this.props.id}
        >
          {[this.getAnalyzers(), languages]}
        </Form.Select>
      </div>
    );
  }
}
