import React, { Component, PropTypes } from 'react'
import Header from './Header'
import MapperCard from './MapperCard'
import MapCard from './MapCard'

const MAP_WIDTH = 252

class Maps extends Component {

  constructor(props) {
    super(props)
    this.state = { mapsWidth: 0 }
  }

  componentDidMount() {
    window && window.addEventListener('resize', this.resize)
    this.resize()
  }

  componentWillUnmount() {
    window && window.removeEventListener('resize', this.resize)
  }

  resize = () => {
    const mapSpaces = Math.floor(document.body.clientWidth / MAP_WIDTH)
    this.setState({ mapsWidth: mapSpaces * MAP_WIDTH })
  }

  render = () => {
    const { maps, currentUser, section, user, moreToLoad, loadMore } = this.props
    const style = { width: this.state.mapsWidth + 'px' }

    return (
      <div>
        <div id='exploreMaps'>
          <div style={ style }>
            { user ? <MapperCard user={ user } /> : null }
            { currentUser && !user ? <div className="map newMap"><a href="/maps/new"><div className="newMapImage"></div><span>Create new map...</span></a></div> : null }
            { maps.models.map(map => <MapCard key={ map.id } map={ map } currentUser={ currentUser } />) }
            <div className='clearfloat'></div>
            {!moreToLoad ? null : [
              <button className="button loadMore" onClick={ loadMore }>load more</button>,
              <div className='clearfloat'></div>
            ]}
          </div>
        </div>
        <Header signedIn={ !!currentUser }
          section={ section }
          user={ user }
          />
      </div>
    )
  }
}

Maps.propTypes = {
  section: PropTypes.string.isRequired,
  maps: PropTypes.object.isRequired,
  moreToLoad: PropTypes.bool.isRequired,
  user: PropTypes.object,
  currentUser: PropTypes.object,
  loadMore: PropTypes.func
}

export default Maps