#!/usr/bin/env bash

BIN_NAME=$(basename "$0")
COMMAND_NAME=$1
SUB_COMMAND_NAME=$2

ARROW="￫"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'

# Get dotfiles dir (so run this script from anywhere)
export DOTFILES_DIR EXTRA_DIR
DOTFILES_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"

sub_help () {
    echo -e "$ARROW Usage: ${YELLOW}$BIN_NAME <command>${NC}"
    echo
    echo "Commands:"
    echo "   help             This help message"
    echo "   update           Update packages and pkg managers (OS, brew, node, npm, yarn, commposer)"
    echo "   clean            Clean up caches (brew, npm, yarn, composer)"
    echo "   symlinks         Run symlinks script"
    echo "   brew             Run brew script"
    echo "   valet            Run valet script"
    echo "   ohmyzsh          Run oh my zsh script"
    echo "   hosts            Run hosts script"
    echo "   defaults         Run MacOS defaults script"
    echo "   dock             Run MacOS dock script"
}

sub_update () {
    sudo softwareupdate -i -a
    sudo n lts # install last lts node instance
    brew update
    brew upgrade
    echo -e "${GREEN}$ARROW Success! Update command finished.${NC}"
}

sub_clean () {
    brew cleanup
    brew cask cleanup
    npm cache clean --force
    yarn cache clean
    composer clear-cache
    echo -e "${GREEN}$ARROW Success! Clean command finished.${NC}"
}

sub_symlinks () {
    . "$DOTFILES_DIR/install/symlinks.sh"
    echo -e "${GREEN}$ARROW Success! Symlinks command finished.${NC}"
}

sub_brew () {
    . "$DOTFILES_DIR/install/brew.sh"
    echo -e "${GREEN}$ARROW Success! Brew command finished.${NC}"
}

sub_valet () {
    . "$DOTFILES_DIR/install/valet.sh"
    echo -e "${GREEN}$ARROW Success! Valet command finished.${NC}"
}

sub_ohmyzsh () {
    . "$DOTFILES_DIR/install/oh-my-zsh.sh"
    echo -e "${GREEN}$ARROW Success! Oh my zsh command finished.${NC}"
}

sub_hosts () {
    . "$DOTFILES_DIR/install/hosts.sh"
    echo -e "${GREEN}$ARROW Success! Hosts command finished.${NC}"
}

sub_defaults () {
    . "$DOTFILES_DIR/macos/defaults.sh"
    echo -e "${GREEN}$ARROW Success! MacOS defaults command finished.${NC}"
}

sub_dock () {
    . "$DOTFILES_DIR/macos/dock.sh"
    echo -e "${GREEN}$ARROW Success! MacOS dock command finished.${NC}"
}

case $COMMAND_NAME in
    "" | "-h" | "--help")
        sub_help
        ;;
    *)
        shift
        sub_${COMMAND_NAME} $@
        if [ $? = 127 ]; then
            echo -e "${RED}$ARROW Error: '$COMMAND_NAME' is not a known command or has errors.${NC}" >&2
            sub_help
            exit 1
        fi
        ;;
esac