#!/bin/bash

if [[ -z "$1" ]]; then
  echo "Usage: omarchy-install-dev-env <ruby|node|bun|go|laravel|symfony|php|python|elixir|phoenix|rust|java|ocaml|dotnet>" >&2
  exit 1
fi

install_php() {
  sudo pacman -Sy php composer php-sqlite --noconfirm

  # Install Path for Composer
  if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then
    echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
    source "$HOME/.bashrc"
    echo "Added Composer global bin directory to PATH."
  else
    echo "Composer global bin directory already in PATH."
  fi

  # Enable some extensions
  local php_ini_path="/etc/php/php.ini"
  local extensions_to_enable=(
    "bcmath"
    "intl"
    "iconv"
    "openssl"
    "pdo_sqlite"
    "pdo_mysql"
  )

  for ext in "${extensions_to_enable[@]}"; do
    sudo sed -i "s/^;extension=${ext}/extension=${ext}/" "$php_ini_path"
  done
}

case "$1" in
ruby)
  echo -e "Installing Ruby on Rails...\n"
  mise use --global ruby@latest
  mise settings add idiomatic_version_file_enable_tools ruby
  mise x ruby -- gem install rails --no-document
  echo -e "\nYou can now run: rails new myproject"
  ;;
node)
  echo -e "Installing Node.js...\n"
  mise use --global node@lts
  ;;
bun)
  echo -e "Installing Bun...\n"
  mise use -g bun@latest
  ;;
deno)
  echo -e "Installing Deno...\n"
  mise use -g deno@latest
  ;;
go)
  echo -e "Installing Go...\n"
  mise use --global go@latest
  ;;
php)
  echo -e "Installing PHP...\n"
  install_php
  ;;
laravel)
  echo -e "Installing PHP and Laravel...\n"
  install_php
  composer global require laravel/installer
  echo -e "\nYou can now run: laravel new myproject"
  ;;
symfony)
  echo -e "Installing PHP and Symfony...\n"
  install_php
  yay -S symfony-cli --noconfirm
  echo -e "\nYou can now run: symfony new --webapp myproject"
  ;;
python)
  echo -e "Installing Python...\n"
  mise use --global python@latest
  echo -e "\nInstalling uv...\n"
  curl -fsSL https://astral.sh/uv/install.sh | sh
  ;;
elixir)
  echo -e "Installing Elixir...\n"
  mise use --global erlang@latest
  mise use --global elixir@latest
  mise x elixir -- mix local.hex --force
  ;;
phoenix)
  echo -e "Installing Phoenix Framework...\n"
  # Ensure Erlang/Elixir first
  mise use --global erlang@latest
  mise use --global elixir@latest
  # Hex & Rebar
  mise x elixir -- mix local.hex --force
  mise x elixir -- mix local.rebar --force
  # Phoenix project (phx_new)
  mise x elixir -- mix archive.install hex phx_new --force
  echo -e "\nYou can now run: mix phx.new my_app"
  ;;
rust)
  echo -e "Installing Rust...\n"
  bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
  ;;
java)
  echo -e "Installing Java...\n"
  mise use --global java@latest
  ;;
zig)
  echo -e "Installing Zig...\n"
  mise use --global zig@latest
  ;;
ocaml)
  echo -e "Installing OCaml...\n"
  bash -c "$(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
  opam init --yes
  eval "$(opam env)"
  opam install ocaml-lsp-server odoc ocamlformat utop --yes
  ;;
dotnet)
  echo -e "Installing .NET...\n"
  mise use --global dotnet@latest
  ;;
esac
