const os = require('os');
const jsonPath = require('jsonpath');

const FILTERABLE = ['userInfo', 'cpus'];

module.exports.templateTags = [
  {
    displayName: 'OS',
    name: 'os',
    description: 'get OS info',
    args: [
      {
        displayName: 'Function',
        type: 'enum',
        options: [
          { displayName: 'arch', value: 'arch' },
          { displayName: 'cpus', value: 'cpus' },
          { displayName: 'freemem', value: 'freemem' },
          { displayName: 'hostname', value: 'hostname' },
          { displayName: 'platform', value: 'platform' },
          { displayName: 'release', value: 'release' },
          { displayName: 'userInfo', value: 'userInfo' },
        ],
      },
      {
        displayName: 'JSONPath Filter',
        help: 'Some OS functions return objects. Use JSONPath queries to extract desired values.',
        hide: args => !FILTERABLE.includes(args[0].value),
        type: 'string',
      },
    ],
    run(context, fnName, filter) {
      let value = os[fnName]();

      if (jsonPath && FILTERABLE.includes(fnName)) {
        try {
          value = jsonPath.query(value, filter)[0];
        } catch (err) {}
      }

      if (typeof value !== 'string') {
        return JSON.stringify(value);
      } else {
        return value;
      }
    },
  },
];
