# run_web_chrome.ps1 — Run Sojorn in Chrome browser
# Usage: .\run_web_chrome.ps1 [-Port 8002] [-EnvPath .env]
param(
  [string]$EnvPath = "",
  [int]$Port = 8002
)

$RepoRoot = $PSScriptRoot
$AppPath = Join-Path $RepoRoot "sojorn_app"
if ([string]::IsNullOrWhiteSpace($EnvPath)) {
  $EnvPath = Join-Path $RepoRoot ".env"
}
if (-not (Test-Path $AppPath)) {
  Write-Error "sojorn_app not found at ${AppPath}"
  exit 1
}

function Get-EnvValues($path) {
  $vals = @{}
  if (-not (Test-Path $path)) {
    Write-Host "No .env file found at ${path}. Using defaults." -ForegroundColor Yellow
    $vals['API_BASE_URL'] = 'https://api.sojorn.net/api/v1'
    return $vals
  }
  Get-Content $path | ForEach-Object {
    $line = $_.Trim()
    if ($line.Length -eq 0 -or $line.StartsWith('#')) { return }
    $parts = $line -split '=', 2
    if ($parts.Count -lt 2) { return }
    $key = $parts[0].Trim()
    $value = $parts[1].Trim()
    if ($value.StartsWith('"') -and $value.EndsWith('"')) {
      $value = $value.Substring(1, $value.Length - 2)
    }
    $vals[$key] = $value
  }
  return $vals
}

$values = Get-EnvValues $EnvPath

$defineArgs = @()
$keysOfInterest = @('API_BASE_URL', 'FIREBASE_WEB_VAPID_KEY', 'TURNSTILE_SITE_KEY')
foreach ($k in $keysOfInterest) {
  if ($values.ContainsKey($k) -and -not [string]::IsNullOrWhiteSpace($values[$k])) {
    $defineArgs += "--dart-define=$k=$($values[$k])"
  }
}

if (-not $values.ContainsKey('API_BASE_URL') -or [string]::IsNullOrWhiteSpace($values['API_BASE_URL'])) {
  $currentApi = 'https://api.sojorn.net/api/v1'
  $defineArgs += "--dart-define=API_BASE_URL=$currentApi"
} else {
  $currentApi = $values['API_BASE_URL']
}

Write-Host "Launching Sojorn Web (Chrome)..." -ForegroundColor Cyan
Write-Host "Port: $Port | API: $currentApi"

$flutterCmd = Get-Command flutter -ErrorAction SilentlyContinue
if ($flutterCmd) {
  $FlutterExe = $flutterCmd.Source
} else {
  $fallbackFlutter = "C:\Users\Patrick\develop\flutter\flutter\bin\flutter.bat"
  if (Test-Path $fallbackFlutter) {
    $FlutterExe = $fallbackFlutter
  } else {
    Write-Error "flutter command not found in PATH and fallback not found at $fallbackFlutter"
    exit 1
  }
}

Push-Location $AppPath
try {
  $cmdArgs = @('run', '-d', 'chrome', '--web-hostname', 'localhost', '--web-port', "$Port")
  $cmdArgs += $defineArgs

  Write-Host "Running: flutter $($cmdArgs -join ' ')" -ForegroundColor DarkGray
  & $FlutterExe $cmdArgs
}
finally {
  Pop-Location
}
