import React from 'react';
import classNames from 'classnames';

import { icons, SessionIconSize, SessionIconType } from '../icon';

export interface Props {
  iconType: SessionIconType;
  iconSize: SessionIconSize | number;
  iconColor: string;
  iconPadded: boolean;
  iconRotation: number;
}

export class SessionIcon extends React.PureComponent<Props> {
  public static defaultProps = {
    iconSize: SessionIconSize.Medium,
    iconColor: '',
    iconRotation: 0,
    iconPadded: false,
  };

  constructor(props: any) {
    super(props);
  }

  public render() {
    const {
      iconType,
      iconSize,
      iconColor,
      iconRotation,
      iconPadded,
    } = this.props;

    let iconDimensions;
    if (typeof iconSize === 'number') {
      iconDimensions = iconSize;
    } else {
      switch (iconSize) {
        case SessionIconSize.Small:
          iconDimensions = '15';
          break;
        case SessionIconSize.Medium:
          iconDimensions = '20';
          break;
        case SessionIconSize.Large:
          iconDimensions = '25';
          break;
        case SessionIconSize.Huge:
          iconDimensions = '30';
          break;
        case SessionIconSize.Max:
          iconDimensions = '80';
          break;
        default:
          iconDimensions = '20';
      }
    }

    const iconDef = icons[iconType];

    const styles = {
      transform: `rotate(${iconRotation}deg)`,
    };

    return (
      <svg
        className={classNames(
          'session-icon',
          iconType,
          iconPadded ? 'padded' : ''
        )}
        version="1.1"
        preserveAspectRatio="xMidYMid meet"
        viewBox={iconDef.viewBox}
        width={iconDimensions}
        height={iconDimensions}
        style={styles}
      >
        <path d={iconDef.path} fill={iconColor} />
      </svg>
    );
  }
}
