'use strict';

var define = require('define-properties');
var gOPD = require('gopd');
var getPolyfill = require('./polyfill');

module.exports = function shimGlobal() {
	var polyfill = getPolyfill();
	if (define.supportsDescriptors) {
		var descriptor = gOPD(polyfill, 'globalThis');
		if (
			!descriptor
			|| (
				descriptor.configurable
				&& (descriptor.enumerable || !descriptor.writable || globalThis !== polyfill)
			)
		) {
			Object.defineProperty(polyfill, 'globalThis', {
				configurable: true,
				enumerable: false,
				value: polyfill,
				writable: true
			});
		}
	} else if (typeof globalThis !== 'object' || globalThis !== polyfill) {
		polyfill.globalThis = polyfill;
	}
	return polyfill;
};