// @flow
import { createSelector } from 'reselect';

type State = { file: FileState };

export const selectState = (state: State): FileState => state.file || {};

export const selectPurchaseUriErrorMessage: (state: State) => string = createSelector(
  selectState,
  state => state.purchaseUriErrorMessage
);

export const selectFailedPurchaseUris: (state: State) => Array<string> = createSelector(
  selectState,
  state => state.failedPurchaseUris
);

export const selectPurchasedUris: (state: State) => Array<string> = createSelector(
  selectState,
  state => state.purchasedUris
);

export const selectPurchasedStreamingUrls: (state: State) => {} = createSelector(
  selectState,
  state => state.purchasedStreamingUrls
);

export const selectLastPurchasedUri: (state: State) => string = createSelector(
  selectState,
  state =>
    state.purchasedUris.length > 0 ? state.purchasedUris[state.purchasedUris.length - 1] : null
);

export const makeSelectStreamingUrlForUri = (uri: string): ((state: State) => {}) =>
  createSelector(
    selectPurchasedStreamingUrls,
    streamingUrls => streamingUrls && streamingUrls[uri]
  );