import React from 'react'
import {
  connect
} from 'react-redux'
import {
  doNavigate,
} from 'actions/app'
import {
  doResolveUri,
  doCancelResolveUri,
} from 'actions/content'
import {
  selectObscureNsfw,
} from 'selectors/app'
import {
  makeSelectClaimForUri,
  makeSelectMetadataForUri,
} from 'selectors/claims'
import {
  makeSelectFileInfoForUri,
} from 'selectors/file_info'
import {
  makeSelectIsResolvingForUri,
} from 'selectors/content'
import FileCard from './view'

const makeSelect = () => {
  const selectClaimForUri = makeSelectClaimForUri()
  const selectFileInfoForUri = makeSelectFileInfoForUri()
  const selectMetadataForUri = makeSelectMetadataForUri()
  const selectResolvingUri = makeSelectIsResolvingForUri()

  const select = (state, props) => ({
    claim: selectClaimForUri(state, props),
    fileInfo: selectFileInfoForUri(state, props),
    obscureNsfw: selectObscureNsfw(state),
    metadata: selectMetadataForUri(state, props),
    isResolvingUri: selectResolvingUri(state, props),
  })

  return select
}

const perform = (dispatch) => ({
  navigate: (path, params) => dispatch(doNavigate(path, params)),
  resolveUri: (uri) => dispatch(doResolveUri(uri)),
  cancelResolveUri: (uri) => dispatch(doCancelResolveUri(uri))
})

export default connect(makeSelect, perform)(FileCard)