#!/bin/bash

# Sync Nnomarchy theme to VS Code, VSCodium, and Cursor

VS_CODE_THEME="$HOME/.config/nnomarchy/current/theme/vscode.json"

set_theme() {
  local editor_cmd="$1"
  local settings_path="$2"

  nnomarchy-cmd-present "$editor_cmd" && [[ $NNOMARCHY_TOGGLE_SKIP_VSCODE_THEME != "true" ]] || return 0

  if [[ -f $VS_CODE_THEME ]]; then
    theme_name=$(jq -r '.name' "$VS_CODE_THEME")
    extension=$(jq -r '.extension' "$VS_CODE_THEME")

    if [[ -n $extension ]] && ! "$editor_cmd" --list-extensions | grep -Fxq "$extension"; then
      "$editor_cmd" --install-extension "$extension" >/dev/null
    fi

    mkdir -p "$(dirname "$settings_path")"
    [[ -f $settings_path ]] || printf '{\n}\n' >"$settings_path"

    if ! grep -q '"workbench.colorTheme"' "$settings_path"; then
      sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$settings_path"
    fi

    sed -i --follow-symlinks -E \
      "s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
      "$settings_path"
  elif [[ -f $settings_path ]]; then
    sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$settings_path"
  fi
}

set_theme "code" "$HOME/.config/Code/User/settings.json"
set_theme "code-insiders" "$HOME/.config/Code - Insiders/User/settings.json"
set_theme "codium" "$HOME/.config/VSCodium/User/settings.json"
set_theme "cursor" "$HOME/.config/Cursor/User/settings.json"
