import { connect } from 'react-redux';
import {
  closeModal,
  decreaseIndexInModal,
  increaseIndexInModal
} from '../../../actions/modal';
import Lightbox from '../../../components/lightbox';
import ImageLoader from 'react-imageloader';
import LoadingIndicator from '../../../components/loading_indicator';
import PureRenderMixin from 'react-addons-pure-render-mixin';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ExtendedVideoPlayer from '../../../components/extended_video_player';
const mapStateToProps = state => ({
  media: state.getIn(['modal', 'media']),
  index: state.getIn(['modal', 'index']),
  isVisible: state.getIn(['modal', 'open'])
});
const mapDispatchToProps = dispatch => ({
  onCloseClicked () {
    dispatch(closeModal());
  },
  onOverlayClicked () {
    dispatch(closeModal());
  },
  onNextClicked () {
    dispatch(increaseIndexInModal());
  },
  onPrevClicked () {
    dispatch(decreaseIndexInModal());
  }
});
const imageStyle = {
  display: 'block',
  maxWidth: '80vw',
  maxHeight: '80vh'
};
const loadingStyle = {
  width: '400px',
  paddingBottom: '120px'
};
const preloader = () => (
  
    
  
);
const leftNavStyle = {
  position: 'absolute',
  background: 'rgba(0, 0, 0, 0.5)',
  padding: '30px 15px',
  cursor: 'pointer',
  fontSize: '24px',
  top: '0',
  left: '-61px',
  boxSizing: 'border-box',
  height: '100%',
  display: 'flex',
  alignItems: 'center'
};
const rightNavStyle = {
  position: 'absolute',
  background: 'rgba(0, 0, 0, 0.5)',
  padding: '30px 15px',
  cursor: 'pointer',
  fontSize: '24px',
  top: '0',
  right: '-61px',
  boxSizing: 'border-box',
  height: '100%',
  display: 'flex',
  alignItems: 'center'
};
const Modal = React.createClass({
  propTypes: {
    media: ImmutablePropTypes.list,
    index: React.PropTypes.number.isRequired,
    isVisible: React.PropTypes.bool,
    onCloseClicked: React.PropTypes.func,
    onOverlayClicked: React.PropTypes.func,
    onNextClicked: React.PropTypes.func,
    onPrevClicked: React.PropTypes.func
  },
  mixins: [PureRenderMixin],
  handleNextClick () {
    this.props.onNextClicked();
  },
  handlePrevClick () {
    this.props.onPrevClicked();
  },
  componentDidMount () {
    this._listener = e => {
      if (!this.props.isVisible) {
        return;
      }
      switch(e.key) {
      case 'ArrowLeft':
        this.props.onPrevClicked();
        break;
      case 'ArrowRight':
        this.props.onNextClicked();
        break;
      }
    };
    window.addEventListener('keyup', this._listener);
  },
  componentWillUnmount () {
    window.removeEventListener('keyup', this._listener);
  },
  render () {
    const { media, index, ...other } = this.props;
    if (!media) {
      return null;
    }
    const attachment = media.get(index);
    const url = attachment.get('url');
    let leftNav, rightNav, content;
    leftNav = rightNav = content = '';
    if (media.size > 1) {
      leftNav  = 
;
      rightNav = 
;
    }
    if (attachment.get('type') === 'image') {
      content = (
        
      );
    } else if (attachment.get('type') === 'gifv') {
      content = ;
    }
    return (
      
        {leftNav}
        {content}
        {rightNav}
      
    );
  }
});
export default connect(mapStateToProps, mapDispatchToProps)(Modal);