
/*
 *
 *   Copyright 2016 RIFT.IO Inc
 *
 *   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.
 *
 */
var React = require('react');
var Slider = require('react-slick');
//import SkyquakeCarousel from './skyquakeCarousel.jsx';
//This componenet should not be coupled with launchpad

import button from 'widgets/button/rw.button.js'
var LaunchpadFleetStore = require('../launchpadFleetStore.js');
var LaunchpadFleetActions = require('../launchpadFleetActions.js');

require('./carousel.css');
var SimpleSlider = React.createClass({
  propTypes: {
    component_list:           React.PropTypes.array.isRequired,
    slideno:                  React.PropTypes.number,
    externalChangeSlide:      React.PropTypes.bool
  },
  handleClick: function() {
    this.setState({});
  },
  getDefaultProps: function() {
    this.externalChangeSlide = false;
    return {
      externalChangeSlide: false
    }
  },
  getInitialState: function() {
    return {
      }

  },
  changeSlide: function(data) {
    if (data.slideChange > 0) {
      var setSlide = -1;
      for (var i = 0; i < this.props.component_list.length; i++) {
        var component = this.props.component_list[i].component;
        if (Object.prototype.toString.call(component) === "[object Array]") {
          for (var j = 0; j < component.length; j++) {
            var subcomponent = component[j];
            if (subcomponent.props.mp === data.dropdownSlide[0]) {
              setSlide = i;
            }
          }
        } else {
            if (component.props.mp === data.dropdownSlide[0]) {
              setSlide = i;
            }
          }
      }
      if (setSlide < 0) {
        return;
      }
      this.externalChangeSlide = true;
      this.setState({slideno: parseFloat(setSlide)});
    }
  },
  componentDidMount: function() {
    // LaunchpadFleetStore.listen(this.changeSlide);
  },
  componentWillUnmount: function() {
  },
  shouldComponentUpdate: function(nextProps) {

    return true;
    // This prevents things in the carousel from updating which makes no sense because we're displaying metrics that need to update
    // if (nextProps.slideno != this.props.slideno) {
    //   return true;
    // }
    // return false;
  },
  componentDidUpdate: function(prevProps, prevState) {
    if (this.externalChangeSlide > 0) {
      this.externalChangeSlide = false;
      // LaunchpadFleetActions.slideNoStateChangeSuccess();
    }
  },
  handleResize: function(e) {

  },
  render: function () {
    // var settings = {
    //   dots: true,
    //   infinite: false,
    //   speed: 500,
    //   slidesToShow: 1,
    //   slidesToScroll: 1,
    //   centerMode: true,
    //   initialSlide: this.props.slideno || 2
    // };
    var settings = {
        dots: true,
        infinite: false,
        speed: 500,
        slidesToShow: 1,
        slidesToScroll: 1,
        centerMode: true,
        changeSlide: this.externalChangeSlide,
        initialSlide: this.state.slideno || 0
    }
    if (this.externalChangeSlide) {
      settings.initialSlide = this.state.slideno;
    }
    setTimeout(function() {
      window.dispatchEvent(new Event('resize'));
    }, 0)
    var list = [];
    if (this.props.component_list !== undefined) {
      for (var i = 0; i < this.props.component_list.length; i++) {
        let title = this.props.component_list[i].title;
        let displayTitle = title ? 'inherit' : 'none';
        list.push(<div key={i}  className={"component"}><h2 style={{flex: '0 1 auto', justifyContent: 'center', alignSelf: 'center', display: displayTitle, padding: '0.5rem'}}>{title}</h2><div className="componentWrapper">{this.props.component_list[i].component}</div></div>);
      }
    }
    return (
      <div className={list.length > 1 ? '' : 'hideButtons'}>
        <Slider {...settings}>
          {list}
        </Slider>
      </div>
    );
  }
});
module.exports = SimpleSlider;
