#!/bin/bash

update_dependencies() {
  echo 'updating dependencies' &&
  npm update --silent
}

update_version() {
  current_tag=$(git describe --abbrev=0 --tags) &&
  echo 'bump from '$current_tag' to '$1 &&
  sed -i ".bkp" "s/\(version\":[ ]*\"\)$current_tag/\1$1/" package.json &&
  sed -i ".bkp" "s/\(version\":[ ]*\"\)$current_tag/\1$1/" yuidoc.json
}

update_bower() {
  ./node_modules/sync-pkg/cli.js package.json
}

build() {
  echo 'building clappr.js' &&
  npm run build --silent &&
  echo 'building clappr.min.js' &&
  npm run release --silent
}

run_tests() {
  npm test
}

git_push() {
  echo 'pushing to github' &&
  git add package.json bower.json yuidoc.json dist &&
  git commit -m 'bump to '$1 &&
  git tag $1 &&
  git push origin master --tags
}

upload() {
  node upload.js --tag=$1 &&
  node upload.js --tag=latest
}

npm_publish() {
  npm publish
}

send_mail() {
  last_tag=$(git log --tags --no-walk --pretty="format:%d" | sed 2q | sed 's/[()]//g' | sed 's/ tag: //' | sed -n 2p)
  changelog=$(git log --pretty='%h %s (%an)\n' $last_tag..master)
  message="Clappr developers bumped a new version: $1\n\nChangelog:\n=========\n$changelog\n\nwith love,\nYour happy butler.\n"
  echo -e $message | mail -s "$(echo -e "[clappr] new version released: $1\nFrom: Clappr Butler <butler@clappr.io>\n")" videos5@corp.globo.com
  return 0
}

main() {
  update_dependencies &&
  update_version $1 &&
  update_bower &&
  build
  if (("$?" != "0")); then
    echo "something failed during dependency update, version update, or build"
    exit 1
  fi
  run_tests
  if (("$?" == "0")); then
    git_push $1 &&
    upload $1 &&
    npm_publish &&
    send_mail $1 &&
    exit 0

    echo "something failed"
    exit 1
  else
    echo "you broke the tests. fix it before bump another version."
    exit 1
  fi
}

if [ "$1" != "" ]; then
  main $1
else
  echo "Usage: bump [new_version]"
fi
