import { getEnvVariable, EnvVarKey } from 'config';

const getFeatureVariable = (flagId: EnvVarKey): boolean => {
  // TODO: move feature flag storage to database instead of env variables
  const value = getEnvVariable(flagId);
  if (value === undefined) {
    return false;
  }
  return String(value) === 'true';
};

export const ML_FLAGS = {
  LINK_PREDICTION: getFeatureVariable('LINK_PREDICTION'),
  CENTRALITY: getFeatureVariable('CENTRALITY'),
  COMMUNITY_DETECTION: getFeatureVariable('COMMUNITY_DETECTION'),
  SHORTEST_PATH: getFeatureVariable('SHORTEST_PATH'),
};

export const VISUALIZATIONS_FLAGS = {
  RAWJSONVIS: getFeatureVariable('RAWJSONVIS'),
  NODELINKVIS: getFeatureVariable('NODELINKVIS'),
  TABLEVIS: getFeatureVariable('TABLEVIS'),
  PAOHVIS: getFeatureVariable('PAOHVIS'),
  MATRIXVIS: getFeatureVariable('MATRIXVIS'),
  SEMANTICSUBSTRATESVIS: getFeatureVariable('SEMANTICSUBSTRATESVIS'),
  MAPVIS: getFeatureVariable('MAPVIS'),
  VIS0D: getFeatureVariable('VIS0D'),
  VIS1D: getFeatureVariable('VIS1D'),
};

export const FEATURE_FLAGS = {
  ...ML_FLAGS,
  ...VISUALIZATIONS_FLAGS,
  INSIGHT_SHARING: getFeatureVariable('INSIGHT_SHARING'),
  VIEWER_PERMISSIONS: getFeatureVariable('VIEWER_PERMISSIONS'),
  SHARABLE_EXPLORATION: getFeatureVariable('SHARABLE_EXPLORATION'),
} as const satisfies Record<string, boolean>;

export type FeatureFlagName = keyof typeof FEATURE_FLAGS;

export const canViewFeature = (flagId: FeatureFlagName): boolean => {
  return FEATURE_FLAGS[flagId];
};