#!/bin/bash
#
# Instalador de DJ NOVA para macOS (Apple Silicon).
#
#   curl -fsSL https://djia-sand.vercel.app/install.sh | bash
#
# Descarga el instalador, verifica su SHA-256, lo copia a /Aplicaciones y lo
# deja listo para abrir. Lo que baja por curl no lleva la marca de cuarentena
# del navegador, así que no aparece ningún aviso de Gatekeeper.
#
set -euo pipefail

BASE="${DJNOVA_BASE:-https://djia-sand.vercel.app}"
APP_NAME="DJ NOVA.app"
TMP="$(mktemp -d /tmp/djnova.XXXXXX)"
trap 'rm -rf "$TMP"; [ -n "${MOUNT:-}" ] && hdiutil detach "$MOUNT" -quiet 2>/dev/null || true' EXIT

bold() { printf '\033[1m%s\033[0m\n' "$1"; }
info() { printf '  \033[36m→\033[0m %s\n' "$1"; }
ok()   { printf '  \033[32m✓\033[0m %s\n' "$1"; }
die()  { printf '\n  \033[31m✗ %s\033[0m\n\n' "$1" >&2; exit 1; }

echo
bold "DJ NOVA — instalador para macOS"
echo

[ "$(uname -s)" = "Darwin" ] || die "Esto solo corre en macOS."
if [ "$(uname -m)" != "arm64" ]; then
  die "Esta versión es para Macs con chip Apple (M1/M2/M3/M4). Tu equipo es $(uname -m)."
fi

# ---- manifiesto: versión, archivo y hash esperados
info "Consultando la última versión…"
MANIFEST="$(curl -fsSL "$BASE/download/latest.json")" || die "No pude contactar con $BASE"
VERSION="$(printf '%s' "$MANIFEST" | /usr/bin/python3 -c 'import json,sys; print(json.load(sys.stdin)["version"])')"
FILE="$(printf '%s' "$MANIFEST" | /usr/bin/python3 -c 'import json,sys; print(json.load(sys.stdin)["file"])')"
SHA_EXPECTED="$(printf '%s' "$MANIFEST" | /usr/bin/python3 -c 'import json,sys; print(json.load(sys.stdin)["sha256"])')"
ok "Versión $VERSION"

# ---- descarga
info "Descargando el instalador…"
curl -fL --progress-bar "$BASE$FILE" -o "$TMP/djnova.dmg" || die "Falló la descarga."

info "Verificando la firma del archivo…"
SHA_REAL="$(shasum -a 256 "$TMP/djnova.dmg" | cut -d' ' -f1)"
[ "$SHA_REAL" = "$SHA_EXPECTED" ] || die "El archivo descargado no coincide con el original (SHA-256). No lo instalo."
ok "SHA-256 correcto"

# ---- instalación
if pgrep -f "/$APP_NAME/Contents/MacOS/" >/dev/null 2>&1; then
  info "Cerrando la versión que estaba abierta…"
  pkill -f "/$APP_NAME/Contents/MacOS/" 2>/dev/null || true
  sleep 2
fi

info "Montando el disco…"
MOUNT="$(hdiutil attach "$TMP/djnova.dmg" -nobrowse -readonly | grep -o '/Volumes/.*' | tail -1)"
[ -d "$MOUNT/$APP_NAME" ] || die "El disco no contiene $APP_NAME."

DEST="/Applications"
if [ ! -w "$DEST" ]; then
  DEST="$HOME/Applications"
  mkdir -p "$DEST"
  info "Sin permiso en /Aplicaciones: instalo en $DEST"
fi

info "Copiando a $DEST…"
rm -rf "${DEST:?}/$APP_NAME"
cp -R "$MOUNT/$APP_NAME" "$DEST/"
hdiutil detach "$MOUNT" -quiet 2>/dev/null || true
MOUNT=""

# sin cuarentena: la app abre directo, sin el aviso de "desarrollador no identificado"
xattr -dr com.apple.quarantine "$DEST/$APP_NAME" 2>/dev/null || true
ok "Instalada en $DEST"

if codesign --verify --strict "$DEST/$APP_NAME" 2>/dev/null; then
  ok "Firma verificada"
fi

echo
bold "Listo. Abriendo DJ NOVA…"
echo
printf '  El copiloto de IA ya funciona sin configurar nada.\n'
printf '  Para usar tu propia clave: menú \033[1mCopiloto → Clave de Groq\033[0m\n\n'
open -a "$DEST/$APP_NAME" || true
