import { CliLeaf } from '@alwaysai/alwayscli';
import * as logSymbols from 'log-symbols';
import { AppJsonFile } from '../../../core/app';
import { echo } from '../../../util';

export const show = CliLeaf({
  name: 'show',
  description: `Show your current application analytics configuration`,
  action() {
    const appCfgFile = AppJsonFile();
    const appCfg = appCfgFile.read();
    const analytics = appCfg.analytics ? appCfg.analytics : {};
    echo(analytics);
  }
});

export function printAnalytics(opts: { changed: boolean; analytics? }) {
  const { changed, analytics } = opts;
  const log = changed
    ? `${logSymbols.success} Updated analytics configuration.`
    : `${logSymbols.warning} Analytics configuration not updated.`;
  echo(log);
  echo(`analytics: ${JSON.stringify(analytics || {}, null, 2)}`);
}

export const enableCloudPublish = CliLeaf({
  name: 'enable-cloud-publish',
  description: `Enable analytics cloud publish`,
  action() {
    const appCfgFile = AppJsonFile();
    const result = appCfgFile.update((appCfg) => {
      const analytics = appCfg.analytics || {};
      appCfg.analytics = { ...analytics, enable_cloud_publish: true };
    });
    printAnalytics({
      changed: result.changed,
      analytics: appCfgFile.read().analytics
    });
  }
});

export const disableCloudPublish = CliLeaf({
  name: 'disable-cloud-publish',
  description: `Disable analytics cloud publish`,
  action() {
    const appCfgFile = AppJsonFile();
    const result = appCfgFile.update((appCfg) => {
      if (appCfg.analytics) {
        appCfg.analytics.enable_cloud_publish = false;
      }
    });
    printAnalytics({
      changed: result.changed,
      analytics: appCfgFile.read().analytics
    });
  }
});

export const enableFilePublish = CliLeaf({
  name: 'enable-file-publish',
  description: `Enable analytics file publish`,
  action() {
    const appCfgFile = AppJsonFile();
    const result = appCfgFile.update((appCfg) => {
      if (!appCfg.analytics) {
        appCfg.analytics = { enable_file_publish: true };
      } else {
        appCfg.analytics.enable_file_publish = true;
      }
    });
    printAnalytics({
      changed: result.changed,
      analytics: appCfgFile.read().analytics
    });
  }
});

export const disableFilePublish = CliLeaf({
  name: 'disable-file-publish',
  description: `Disable analytics file publish`,
  action() {
    const appCfgFile = AppJsonFile();
    const result = appCfgFile.update((appCfg) => {
      if (appCfg.analytics) {
        appCfg.analytics.enable_file_publish = false;
      }
    });
    printAnalytics({
      changed: result.changed,
      analytics: appCfgFile.read().analytics
    });
  }
});
