#!/usr/bin/env bash
set -e

echo "ðŸ”§ Setup Environment..."
rm -rvf dev.nix
# --- Cek & install dependencies ---
install_with_nix() {
  pkg=$1
  if ! nix-env -q "$pkg" >/dev/null 2>&1; then
    echo "ðŸ“¦ Menginstall $pkg lewat Nix..."
    nix-env -iA nixpkgs.$pkg
  fi
}

command -v nix-env >/dev/null 2>&1 || {
  echo "âš ï¸  Nix tidak ditemukan. Pastikan sudah install Nix package manager!"
  echo "ðŸ‘‰ Lihat: https://nixos.org/download.html"
}

# Cek Flutter
if ! command -v flutter >/dev/null 2>&1; then
  echo "âŒ Flutter belum terinstall."
  install_with_nix flutter || {
    echo "âš ï¸ Tidak bisa install Flutter otomatis (butuh Nix)."
    exit 1
  }
else
  echo "âœ… Flutter sudah ada."
fi

# Cek ADB (android-tools)
if ! command -v adb >/dev/null 2>&1; then
  echo "âŒ adb (android-tools) belum terinstall."
  install_with_nix android-tools || {
    echo "âš ï¸ Tidak bisa install adb otomatis (butuh Nix)."
    exit 1
  }
else
  echo "âœ… adb sudah ada."
fi

# --- Setup JAVA_HOME ---
if [ -z "$JAVA_HOME" ]; then
  if command -v javac >/dev/null 2>&1; then
    export JAVA_HOME="$(dirname $(dirname $(readlink -f $(which javac))))"
    export PATH="$JAVA_HOME/bin:$PATH"
    echo "âœ… JAVA_HOME di-set ke: $JAVA_HOME"
  else
    echo "âš ï¸ Java tidak ditemukan, coba install jdk17 dengan Nix..."
    install_with_nix jdk17
    export JAVA_HOME="$(nix-env -q --out-path jdk17 | awk '{print $2}')/lib/openjdk"
    export PATH="$JAVA_HOME/bin:$PATH"
  fi
fi

# --- Kill Gemini agent ---
echo "ðŸ›‘ Mematikan Gemini agent..."
ps aux | grep -i 'gemini' | grep -v grep | awk '{print $2}' | xargs -r kill -9 || true
echo "âœ… Gemini agent dimatikan (jika ada)."

# --- Kill emulator ---
echo "ðŸ”ª Matikan emulator Android..."

adb -s emulator-5554 emu kill || true
adb -s localhost:5555 emu kill || true
adb devices | grep -q 'emulator' || echo "kill U"

ps aux | grep -i 'qemu-system-x86_64' | grep -v grep | awk '{print $2}' | xargs -r kill -9
ps aux | grep -i 'emulator' | grep -v grep | awk '{print $2}' | xargs -r kill -9

flutter emulators --kill || true
adb shell am force-stop com.android.launcher || true

clear
echo "âœ… Semua emulator dimatikan."

# --- Build Flutter ---
echo "âš™ï¸  Build Flutter..."
cd android
./gradlew assembleDebug
cd ..

echo "ðŸŽ‰ Build selesai!"

# --- Periksa & update .idx/dev.nix ---
mkdir -p .idx
if [ -f ".idx/dev.nix" ]; then
  echo "ðŸ“ Membersihkan file .idx/dev.nix dari Gemini..."
  grep -vi 'gemini' .idx/dev.nix > .idx/dev.nix.cleaned || true
  mv .idx/dev.nix.cleaned .idx/dev.nix
  echo "âœ… Semua baris terkait Gemini sudah dihapus dari .idx/dev.nix."
else
  echo "ðŸ“ Membuat file .idx/dev.nix baru tanpa Gemini..."
  cat > .idx/dev.nix <<'EOF'
{ pkgs, ... }: {
  channel = "stable-24.05";
  packages = [
    pkgs.jdk17
    pkgs.unzip
    pkgs.flutter
    pkgs.android-tools
  ];
  env = {
    JAVA_HOME = "${pkgs.jdk17}/lib/openjdk";
  };
  idx = {
    extensions = [
      "Dart-Code.flutter"
      "Dart-Code.dart-code"
    ];
    workspace = {
      onCreate = {
        build-flutter = ''
          chmod +x ./kilan.sh
          ./kilan.sh
        '';
      };
      onStart = {
        open-terminal = ''
          chmod +x ./kilan.sh
          ./kilan.sh
          $SHELL
        '';
      };
    };
    previews = {
      enable = true;
      previews = {
        web = {
          command = ["flutter" "run" "--machine" "-d" "web-server" "--web-hostname" "0.0.0.0" "--web-port" "$PORT"];
          manager = "flutter";
        };
      };
    };
  };
}
EOF
  echo "âœ… File .idx/dev.nix baru berhasil dibuat."
fi