text: import gte from 'semver/functions/gte';
  import coerce from 'semver/functions/coerce';
  
  import reduxStore from '../createStore';
  import database from '../database';
  import log from '../../utils/log';
  import { setEnterpriseModules as setEnterpriseModulesAction, clearEnterpriseModules } from '../../actions/enterpriseModules';
  
  export const LICENSE_OMNICHANNEL_MOBILE_ENTERPRISE = 'omnichannel-mobile-enterprise';
  export const LICENSE_LIVECHAT_ENTERPRISE = 'livechat-enterprise';
  
  export async function setEnterpriseModules() {
  	try {
  		const { server: serverId } = reduxStore.getState().server;
  		const serversDB = database.servers;
  		const serversCollection = serversDB.collections.get('servers');
  		let server;
  		try {
  			server = await serversCollection.find(serverId);
  		} catch {
  			// Server not found
  		}
  		if (server?.enterpriseModules) {
  			reduxStore.dispatch(setEnterpriseModulesAction(server.enterpriseModules.split(',')));
  			return;
  		}
  		reduxStore.dispatch(clearEnterpriseModules());
  	} catch (e) {
  		log(e);
  	}
  }
  
  export function getEnterpriseModules() {
  	return new Promise(async(resolve) => {
  		try {
  			const { version: serverVersion, server: serverId } = reduxStore.getState().server;
  			if (serverVersion && gte(coerce(serverVersion), '3.1.0')) {
  				// RC 3.1.0
  				const enterpriseModules = await this.methodCallWrapper('license:getModules');
  				if (enterpriseModules) {
  					const serversDB = database.servers;
  					const serversCollection = serversDB.collections.get('servers');
  					const server = await serversCollection.find(serverId);
  					await serversDB.action(async() => {
  						await server.update((s) => {
  							s.enterpriseModules = enterpriseModules.join(',');
  						});
  					});
  					reduxStore.dispatch(setEnterpriseModulesAction(enterpriseModules));
  					return resolve();
  				}
  			}
  			reduxStore.dispatch(clearEnterpriseModules());
  		} catch (e) {
  			log(e);
  		}
  		return resolve();
  	});
  }
  
  export function hasLicense(module) {
  	const { enterpriseModules } = reduxStore.getState();
  	return enterpriseModules.includes(module);
  }
  
  export function isOmnichannelModuleAvailable() {
  	const { enterpriseModules } = reduxStore.getState();
  	return [LICENSE_OMNICHANNEL_MOBILE_ENTERPRISE, LICENSE_LIVECHAT_ENTERPRISE].some(module => enterpriseModules.includes(module));
  }
  