#!/bin/bash

## flyingscorpio
## Script to automate the setting up of my working environment.
## Uncomment the function calls you wish to run.


# Set up {{{

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
ORANGE=$(tput setaf 3)
NC=$(tput sgr0)

export RED
export GREEN
export ORANGE
export NC

BASE_DIR="$PWD"
export BASE_DIR

GITHUB_DOTFILES=~/github_dotfiles
export GITHUB_DOTFILES

separator() {
  exit_status=$?
  if [ $exit_status -eq 0 ]; then
    echo -n "${GREEN}"
  else
    echo -n "${RED}"
  fi
  echo "========================================"
  echo "${NC}"
}

# }}}

# Define OS {{{

OS='none'

os_release=$(cat /etc/os-release*)
case ${os_release,,} in
  *debian* )
    OS='debian'
    echo "You are using Debian"
    ;;
  *ubuntu* )
    OS='debian'
    echo "You are using Ubuntu"
    ;;
  *arch* )
    OS='arch'
    echo "You are using Arch-Linux"
    ;;
  *manjaro* )
    OS='arch'
    echo "You are using Manjaro"
    ;;
  * )
    echo "${ORANGE}Unable to determine OS${NC}"
    echo "Which OS are you using?"
    select OS in 'Debian / Ubuntu' 'Arch / Manjaro'; do
      case $OS in
        'Debian / Ubuntu' ) OS='debian'; break;;
        'Arch / Manjaro' ) OS='arch'; break;;
      esac
    done
    echo "Using $OS"
esac

export OS

# }}}

# Handle args {{{

OVERWRITE='false'
UPDATE='false'

case "$1" in
  -o | --overwrite )
    echo "${ORANGE}You agree to overwrite preexisting files!${NC}"
    OVERWRITE='true'
    ;;
  -u | --update )
    echo "${ORANGE}Set to update plugins!${NC}"
    UPDATE='true'
    ;;
  -ou | -uo )
    echo "${ORANGE}Both options were set.${NC}"
    OVERWRITE='true'
    UPDATE='true'
    ;;
  * )
    echo "Din't understand arguments"
    exit 1
esac
if [ "$#" -eq 2 ]; then
  case "$2" in
    -o | --overwrite )
      echo "${ORANGE}You agree to overwrite preexisting files!${NC}"
      OVERWRITE='true'
      ;;
    -u | --update )
      echo "${ORANGE}Set to update plugins!${NC}"
      UPDATE='true'
      ;;
    * )
      echo "Din't understand arguments"
      exit 1
  esac
fi

export OVERWRITE
export UPDATE

# }}}

install_scripts() { # {{{

  echo "Installing scripts..."

  if [ "$OS" = 'debian' ]; then
    /bin/bash "$BASE_DIR"/installation_scripts/debian_based_installs.sh
  elif [ "$OS" = 'arch' ]; then
    /bin/bash "$BASE_DIR"/installation_scripts/arch_based_installs.sh
  else
    echo "${RED} Didn't receive correct OS information, quitting...${NC}"
    exit 1
  fi

  separator

} # }}}
# install_scripts

update_vim() { # {{{
  # Update vim configuration

  echo "Setting up configuration for Vim..."
  /bin/bash "$BASE_DIR"/installation_scripts/vim.sh
  separator

} # }}}
update_vim

setup_sddm() { # {{{
  # Update sddm

  echo "Setting up SDDM..."
  /bin/bash "$BASE_DIR"/install_scripts/sddm.sh
  separator

} # }}}
setup_sddm

update_i3() { # {{{
  # Update i3 configuration

  echo "Setting up i3..."
  /bin/bash "$BASE_DIR"/installation_scripts/i3.sh
  separator

} # }}}
update_i3

configure_protonvpn() { # {{{
  # Configure ProtonVPN

  echo "Configuring ProtonVPN..."
  sudo protonvpn init && sudo protonvpn c --cc CH
  separator

} # }}}
# configure_protonvpn

setup_bash_files() { # {{{
  # Set up .bashrc

  echo "Updating .bashrc..."
  if [ ! -L ~/.bashrc ]; then
    ln -rs "$BASE_DIR"/dotfiles/bash/bashrc ~/.bashrc 2> /dev/null
  fi
  separator

  # Set up .bash_aliases

  echo "Updating .bash_aliases..."
  if [ ! -L ~/.bash_aliases ]; then
    ln -rs "$BASE_DIR"/dotfiles/bash/bash_aliases ~/.bash_aliases 2> /dev/null
  fi
  separator

} # }}}
# update_bash_files

configure_git() { # {{{
  # Configure Git

  echo "Configuring Git..."
  git config --global user.name "$USER@$(uname -n)"
  git config --global user.email "tfranken@protonmail.com"
  git config --global alias.ci "commit"
  git config --global alias.co "checkout"
  git config --global alias.st "status"
  git config --global alias.br "branch"
  separator

} # }}}
# configure_git

install_rust() { # {{{
  # Install Rust

  echo "Installing Rust..."
  if rustc --version; then
    echo "${GREEN}Rust is already intalled${NC}"
    if [ "$UPDATE" = 'true' ]; then
      echo "Updading..."
      rustup update
    fi
  else
    if curl https://sh.rustup.rs -sSf | sh; then
      echo "${GREEN}Successfully installed Rust${NC}"
    else
      echo "${ORANGE}There was a problem while installing Rust${NC}"
    fi
  fi
  separator

} # }}}
# install_rust

bash_git_prompt() { # {{{
  # Clone bash-git-prompt

  if [ -e ~/.bash-git-prompt ]; then
    echo "${GREEN}Found existing bash-git-prompt.${NC}"
    if [ "$UPDATE" = 'true' ]; then
      echo "Updating..."
      cd ~/.bash-git-prompt && git pull
    fi
  else
    echo "${ORANGE}Cloning bash-git-prompt...${NC}"
    git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
  fi
  separator

} # }}}
# bash_git_prompt

markdown_mimetype() { # {{{
  # Add MIME type for reading .md files in Firefox (need to add extension too)

  echo "Adding MIME type for .md files in Firefox..."
  echo "${ORANGE}Remember to install the Firefox extension for it to work${NC}"
  mkdir -p ~/.local/share/mime/packages
  echo "<?xml version=\"1.0\"?>
  <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type=\"text/plain\">
      <glob pattern=\"*.md\"/>
      <glob pattern=\"*.mkd\"/>
      <glob pattern=\"*.markdown\"/>
    </mime-type>
  </mime-info>" > ~/.local/share/mime/packages/text-markdown.xml
  update-mime-database ~/.local/share/mime
  separator

} # }}}
# markdown_mimetype

clone_projects() { # {{{
  # Clone projects

  echo "Cloning projects..."
  /bin/bash "$BASE_DIR"/installation_scripts/clone_projects.sh
  separator

} # }}}
clone_projects