/*
 * Minio Cloud Storage (C) 2016 Minio, 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.
 */

import React from 'react'
import classNames from 'classnames'
import ClickOutHandler from 'react-onclickout'
import Scrollbars from 'react-custom-scrollbars/lib/Scrollbars'
import connect from 'react-redux/lib/components/connect'

import logo from '../../img/logo.svg'

let SideBar = ({visibleBuckets, loadBucket, currentBucket, selectBucket, searchBuckets, sidebarStatus, clickOutside, showPolicy}) => {

  const list = visibleBuckets.map((bucket, i) => {
    return <li className={ classNames({
                  'active': bucket === currentBucket
                }) } key={ i } onClick={ (e) => selectBucket(e, bucket) }>
             <a href="" className={ classNames({
                                      'fesli-loading': bucket === loadBucket
                                    }) }>
               { bucket }
             </a>
             <i className="fesli-trigger" onClick={ showPolicy }></i>
           </li>
  })

  return (
    <ClickOutHandler onClickOut={ clickOutside }>
      <div className={ classNames({
                         'fe-sidebar': true,
                         'toggled': sidebarStatus
                       }) }>
        <div className="fes-header clearfix hidden-sm hidden-xs">
          <img src={ logo } alt="" />
          <h2>Minio Browser</h2>
        </div>
        <div className="fes-list">
          <div className="input-group ig-dark ig-left ig-search" style={ { display: web.LoggedIn() ? 'block' : 'none' } }>
            <input className="ig-text"
              type="text"
              onChange={ searchBuckets }
              placeholder="Search Buckets..." />
            <i className="ig-helpers"></i>
          </div>
          <div className="fesl-inner">
            <Scrollbars renderScrollbarVertical={ props => <div className="scrollbar-vertical" /> }>
              <ul>
                { list }
              </ul>
            </Scrollbars>
          </div>
        </div>
        <div className="fes-host">
          <i className="fa fa-globe"></i>
          <a href="/">
            { window.location.host }
          </a>
        </div>
      </div>
    </ClickOutHandler>
  )
}

// Subscribe it to state changes that affect only the sidebar.
export default connect(state => {
  return {
    visibleBuckets: state.visibleBuckets,
    loadBucket: state.loadBucket,
    currentBucket: state.currentBucket,
    sidebarStatus: state.sidebarStatus
  }
})(SideBar)
