/* eslint-disable */
// {{comment}}
{% if reactPureRender %}
import Component from 'react-pure-render/component';
import React from 'react';
{%- else %}
import React, {Component} from 'react';
{%- endif %}
import PropTypes from 'prop-types';
import {View, Text as NativeText} from 'react-native';
import Svg, {
  Circle,
  Defs,
  Ellipse,
  G,
  Line,
  LinearGradient,
  Path,
  Polygon,
  Polyline,
  RadialGradient,
  Rect,
  Stop,
  Symbol,
  Text,
  Use
} from 'react-native-svg';

const iconList = [
  {%- for icon in icons %}
  '{{icon.name}}',
  {%- endfor %}
];

export default class {{componentName}} extends Component {

  static propTypes = {
    {%- if useColorProp %}
    color: PropTypes.string,
    {%- endif %}
    height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
    kind: PropTypes.oneOf([
      {%- for icon in icons %}
      '{{icon.name}}',
      {%- endfor %}
    ]).isRequired,
    preview: PropTypes.bool,
    size: PropTypes.number,
    style: View.propTypes.style,
    wrapperStyle: View.propTypes.style,
  };

  static defaultProps = {
    {%- if useColorProp %}
    color: '#000',
    {%- endif %}
    size: 32
  }

  render() {
    const {kind, preview} = this.props;

    return preview ?
      this.renderPreview() :
      this.renderIcon(kind);
  }

  renderPreview() {
    return (
      <View>
        {iconList.map(kind => this.renderPreviewKind(kind))}
      </View>
    );
  }

  renderIcon(kind) {
    const {wrapperStyle} = this.props;

    if (wrapperStyle)
      return <View style={wrapperStyle}>{this.getIcon(kind)}</View>;

    return this.getIcon(kind);
  }

  renderPreviewKind(kind) {
    return (
      <View key={kind}>
        <NativeText>&lt;Icon kind="{kind}" /&gt;</NativeText>
        {this.renderIcon(kind)}
      </View>
    );
  }

  getIcon(kind) {
    const {height, {{ 'color, ' if useColorProp }}size, style, width, ...rest} = this.props;

    switch (kind) {
      default: return null;
      {% for icon in icons -%}
        case ('{{icon.name}}'): return ({{icon.svg | safe}});
      {% endfor -%}
    }
  }
}
