// Bumps a specified style's version

const fs = require('fs')
const path = require('path')

/**
 * @function bump
 * @param {string} jsonPath - Path to the .json file
 * @param {string} incrementType - Which semver type to increment: "major", "minor" or "patch"
 */

function bump(jsonPath, incrementType) {
  if (!fs.existsSync(jsonPath))
    throw Error(`File ${jsonPath} does not exist.`)
  if (path.extname(jsonPath) !== '.json')
    throw Error(`File ${jsonPath} does not end in "json".`)
  if (typeof incrementType === 'undefined')
    throw Error('No valid increment type was included. Valid: "major", "minor" or "patch".')
  if (incrementType !== 'major' && incrementType !== 'minor' && incrementType !== 'patch')
    throw Error(`Increment type ${incrementType} does not equal "major", "minor" or "patch".`)

  const jsonFile = require(jsonPath)

  if (typeof jsonFile.options.version === 'undefined')
    throw Error(`${jsonFile} does not include a "version" property.`)

  const incrementTypes = {
    'major': 0,
    'minor': 1,
    'patch': 2
  }

  const oldVersion = jsonFile.options.version.split('.')
  let bumped = parseInt(oldVersion[incrementTypes[incrementType]]) + 1
  let newVersion
  switch (incrementType) {
  case 'major':
    newVersion = `${bumped}.0.0`
    break
  case 'minor':
    newVersion = `${oldVersion[0]}.${bumped}.0`
    break
  case 'patch':
    newVersion = `${oldVersion[0]}.${oldVersion[1]}.${bumped}`
    break
  }

  jsonFile.options.version = newVersion
  
  fs.writeFileSync(jsonPath, JSON.stringify(jsonFile, null, 2))
}

exports.bump = bump
