/**
 * Mixin to check env.
 * @mixin ApEnvMixin
 */

'use strict'

import React, {PropTypes as types} from 'react'

const ENV_ENV_KEY = "_apEnv"

/** @lends ApEnvMixin */
let ApEnvMixin = {

  // --------------------
  // Custom
  // --------------------
  $apEnvMixed: true,

  /**
   * Detect if env is production.
   * @returns {boolean}
   */
  isProductionEnv () {
    const s = this
    return s.getEnv() === 'production'
  },

  /**
   * Get env values.
   * @returns {string} - Env value.
   */
  getEnv () {
    const s = this
    return s.props.NODE_ENV || s.context[ ENV_ENV_KEY ] || process.env.NODE_ENV
  },

  // --------------------
  // Specs
  // --------------------

  propTypes: {
    NODE_ENV: types.string
  },

  contextTypes: {
    [ENV_ENV_KEY]: types.string
  },

  childContextTypes: {
    [ENV_ENV_KEY]: types.string
  },

  getChildContext () {
    const s = this
    return {
      [ENV_ENV_KEY]: s.getEnv()
    }
  }

}

export default Object.freeze(ApEnvMixin)
