# Jackson Guardian — Arreglar la carpeta temporal de importacion de NinjaTrader
# Causa real (vista en el trace de NT8):
#   "Access to the path '...\NinjaTrader 8\tmp\Import\' is denied"
#   "Could not find a part of the path '...\tmp\Import\Backup'"
# NinjaTrader necesita esas carpetas para importar. Si OneDrive las virtualiza, las
# borra o quedan sin permisos, FALLA CUALQUIER IMPORTACION (y muestra un mensaje
# enganoso sobre "duplicate method names").

$ErrorActionPreference = 'SilentlyContinue'
$host.UI.RawUI.WindowTitle = 'Jackson Guardian - Arreglar importacion'

Write-Host "===============================================================" -ForegroundColor Cyan
Write-Host "   JACKSON GUARDIAN - Arreglar la importacion de NinjaTrader" -ForegroundColor Cyan
Write-Host "===============================================================" -ForegroundColor Cyan
Write-Host ""

if (Get-Process NinjaTrader -ErrorAction SilentlyContinue) {
  Write-Host " [!] Cierra NinjaTrader del todo y vuelve a ejecutar esto." -ForegroundColor Yellow
  Read-Host " ENTER para salir"; exit 1
}

# localizar NinjaTrader 8
$cand = New-Object System.Collections.Generic.List[string]
$docs = [Environment]::GetFolderPath('MyDocuments')
if ($docs) { $cand.Add((Join-Path $docs 'NinjaTrader 8')) }
foreach ($raiz in @($env:USERPROFILE, $env:OneDrive, $env:OneDriveCommercial) | Where-Object { $_ }) {
  foreach ($sub in @('Documents','Documentos','')) {
    $p = if ($sub) { Join-Path (Join-Path $raiz $sub) 'NinjaTrader 8' } else { Join-Path $raiz 'NinjaTrader 8' }
    $cand.Add($p)
  }
}
$rutas = $cand | Where-Object { Test-Path (Join-Path $_ 'bin\Custom') } | Select-Object -Unique
if (-not $rutas) {
  Write-Host " [!] No encuentro NinjaTrader 8." -ForegroundColor Yellow
  Read-Host " ENTER para salir"; exit 1
}

foreach ($nt in $rutas) {
  Write-Host (" NinjaTrader: " + $nt) -ForegroundColor Green
  Write-Host ""

  # 1. crear las carpetas que NinjaTrader necesita para importar
  Write-Host " [1/4] Creando las carpetas de importacion que faltan..." -ForegroundColor Cyan
  foreach ($sub in @('tmp', 'tmp\Import', 'tmp\Import\Backup', 'tmp\Export')) {
    $ruta = Join-Path $nt $sub
    if (-not (Test-Path $ruta)) {
      New-Item -ItemType Directory -Path $ruta -Force | Out-Null
      Write-Host ("   [OK] creada: " + $sub) -ForegroundColor Green
    } else {
      Write-Host ("   [ya existe] " + $sub) -ForegroundColor DarkGray
    }
  }

  # 2. quitar solo-lectura y fijar en local (OneDrive)
  Write-Host ""
  Write-Host " [2/4] Quitando 'solo lectura' y fijando en el equipo..." -ForegroundColor Cyan
  & attrib.exe -R "$nt\tmp\*" /S /D 2>$null | Out-Null
  & attrib.exe +P -U "$nt\tmp\*" /S /D 2>$null | Out-Null
  & attrib.exe -R "$nt\bin\Custom\*.*" /D 2>$null | Out-Null
  Write-Host "   [OK] hecho" -ForegroundColor Green

  # 3. dar permisos completos al usuario sobre la carpeta de NinjaTrader
  Write-Host ""
  Write-Host " [3/4] Asegurando permisos de escritura..." -ForegroundColor Cyan
  $usuario = "$env:USERDOMAIN\$env:USERNAME"
  # solo sobre lo que NinjaTrader necesita para importar (rapido): toda la carpeta
  # tardaria muchisimo por los historicos de datos.
  foreach ($obj in @("$nt\tmp", "$nt\bin\Custom")) {
    if (Test-Path $obj) { & icacls.exe "$obj" /grant "${usuario}:(OI)(CI)F" /T /C /Q 2>$null | Out-Null }
  }
  Write-Host "   [OK] permisos aplicados" -ForegroundColor Green

  # 4. prueba real de escritura
  Write-Host ""
  Write-Host " [4/4] Probando que NinjaTrader ya puede escribir ahi..." -ForegroundColor Cyan
  $prueba = Join-Path $nt 'tmp\Import\Backup\prueba-jg.txt'
  try {
    Set-Content -Path $prueba -Value 'ok' -ErrorAction Stop
    Remove-Item $prueba -Force
    Write-Host "   [OK] PERFECTO: la carpeta de importacion ya funciona." -ForegroundColor Green
  } catch {
    Write-Host "   [!] Sigue sin poder escribir." -ForegroundColor Yellow
    Write-Host "       Prueba a abrir NinjaTrader como administrador (clic derecho >"
    Write-Host "       Ejecutar como administrador) e importar desde ahi."
  }
}

Write-Host ""
Write-Host " AHORA:" -ForegroundColor Cyan
Write-Host "   1. Abre NinjaTrader 8."
Write-Host "   2. Herramientas -> Importar -> Complemento NinjaScript..."
Write-Host "   3. Importa primero el zip MANUAL, reinicia, y luego el de BOTS."
Write-Host ""
Write-Host " Consejo: ten el zip en Descargas o en el Escritorio, NO dentro de OneDrive."
Write-Host ""
Read-Host " Pulsa ENTER para cerrar"
