import React, { useContext } from 'react';
import PropTypes from 'prop-types';

const FeatureContext = React.createContext({ toggles: {} });

const toggleIsActive = (toggles, toggle, brukHvisToggleIkkeFins) => {
	if (!toggles || !toggles.hasOwnProperty(toggle)) {
		console.warn(
			'Bruker en feature-toggle som ikke fins: ',
			toggle,
			', sjekk om den er skrevet riktig og lagt inn i application.yaml i backend'
		);
		return !!brukHvisToggleIkkeFins;
	}
	return toggles[toggle].enabled;
};

const useToggle = (toggle, brukHvisToggleIkkeFins) => {
	const { toggles } = useContext(FeatureContext);
	return toggleIsActive(toggles, toggle, brukHvisToggleIkkeFins);
};

function ToggledComponent({
	toggle,
	children,
	brukHvisToggleIkkeFins,
	hvisAvskrudd,
}) {
	const { toggles } = useContext(FeatureContext);

	if (toggleIsActive(toggles, toggle, brukHvisToggleIkkeFins)) {
		return children;
	}

	return hvisAvskrudd || null;
}

ToggledComponent.propTypes = {
	toggle: PropTypes.string.isRequired,
	brukHvisToggleIkkeFins: PropTypes.bool,
	children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
	hvisAvskrudd: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),
};

export { ToggledComponent, FeatureContext, toggleIsActive, useToggle };
