#!/usr/bin/env python

from __future__ import print_function

import json
import os
import subprocess
import sys

brew_conflicting = ["json-c"]
brew_required = [
    "boost", "boost-python", "boost-python3", "cmake", "cppcheck", "dcmtk",
    "icu4c", "jsoncpp", "lcov", "log4cpp", "pkg-config", "python", "python@2"
]

pip_required = ["cpp-coveralls", "nose"]

for formula in brew_conflicting:
    info = json.loads(
        subprocess.check_output(["brew", "info", "--json=v1", formula]))
    if len(info) > 1:
        print("Too many formulas matching {}".format(formula))
        sys.exit(1)
    elif len(info) == 0:
        continue
    installed = (len(info[0]["installed"]) != 0)
    if installed:
        print("Removing conflicting formula: {}".format(formula))
        subprocess.check_call(["brew", "unlink", formula])

for formula in brew_required:
    info = json.loads(
        subprocess.check_output(["brew", "info", "--json=v1", formula]))
    if len(info) > 1:
        print("Too many formulas matching {}".format(formula))
        sys.exit(1)
    elif len(info) == 0:
        print("No formula matching {}".format(formula))
        sys.exit(1)
    
    action = None
    if len(info[0]["installed"]) == 0:
        action = "install"
    elif info[0]["installed"][-1]["version"] != info[0]["versions"]["stable"]:
        action = "upgrade"
    
    if action is not None:
        subprocess.check_call(["brew", action, formula])

subprocess.check_call(
    ["pip"+os.environ["Python"], "install", "--user", "-U"]+pip_required)
