// @flow
import React, { memo } from 'react'
import DnDBackend from 'react-dnd-html5-backend'
import { DndProvider } from 'react-dnd'
import { styled, Element } from '@siteone/system-core'
import MediaList from '../MediaList'
import MediaDetail from '../MediaDetail'
import MediaLibraryTop from '../MediaLibraryTop'
import MediaLibraryPanel from '../MediaLibraryPanel'
import MediaLibraryFilter from '../MediaLibraryFilter'
import MediaLibraryBottom from '../MediaLibraryBottom'
import DirectoryList from '../DirectoryList'

const Base = styled(Element)`
  border-radius: 3px;
  color: #333;
  width: 100%;
  max-width: 1620px;
  margin: auto;
`

const Body = styled(Element)`
  background: #fff;
  display: flex;
`

const Content = styled(Element)`
  width: 100%;
`

const CenterBar = styled(Element)`
  display: flex;
  padding: 0.5rem 0.5rem 0;
`

const Left = styled(Element)`
  flex-grow: 1;
  overflow-y: auto;
`

const MediaLibrarySearch = props => {
  const {
    media,
    loadMore,
    count,
    hasNext,
    minSizeInfo,
    selectedMediaItem,
    serchConfig,
    hasSelected,
    isLoading,
    withControls,
    withFolders,
    isVideo,
  } = props

  return (
    <Base>
      <MediaLibraryTop isVideo={isVideo} />
      <MediaLibraryPanel />
      <MediaLibraryFilter serchConfig={serchConfig} />
      <DndProvider backend={DnDBackend}>
        <Body>
          {withFolders && <DirectoryList />}
          <Content>
            <CenterBar>
              <Left>
                <MediaList
                  media={media}
                  loadMore={loadMore}
                  hasNext={hasNext}
                  isLoading={isLoading}
                  withControls={withControls}
                  withFolders={withFolders}
                />
              </Left>
              <div>
                <MediaDetail mediaItem={selectedMediaItem} withControls={withControls} isVideo={isVideo} />
              </div>
            </CenterBar>
          </Content>
        </Body>
      </DndProvider>

      <MediaLibraryBottom
        count={count}
        minSizeInfo={minSizeInfo}
        hasSelected={hasSelected}
      />
    </Base>
  )
}

MediaLibrarySearch.defaultProps = {
  minSizeInfo: '',
}

export default memo(MediaLibrarySearch)
