scripts/win/docker/sql-restore-bacpac.ps1

param(
    [Parameter(Mandatory)]
    [string]$BacpacPath
)

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 🧠 SQL BACPAC Restore — Host-based using sqlpackage 🚀
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Write-Host ""
Write-Host "📦 BACPAC File: $BacpacPath" -ForegroundColor Yellow

# 🧪 Ensure sqlpackage is available
$sqlPackageCmd = "sqlpackage"
if (-not (Get-Command $sqlPackageCmd -ErrorAction SilentlyContinue)) {
    Write-Host "❌ 'sqlpackage' not found in PATH. Please ensure it is installed and accessible." -ForegroundColor Red
    exit 1
}

# 🧠 Determine base names
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($BacpacPath)
$proposedName = ($baseName -split '[-_]')[0]

# 🧠 Prompt for database name
$renameOptions = @(
    "Use proposed: $proposedName"
    "Keep original: $baseName"
    "Propose new name..."
)

$selected = $renameOptions | fzf --prompt "🧠 Choose database name for import: " --height 10 --reverse | ForEach-Object { $_.Trim() }

if (-not $selected) {
    Write-Host "❌ No name selected. Aborting." -ForegroundColor Red
    exit 1
}

switch -Regex ($selected) {
    "^Use proposed:" {
        $dbName = $proposedName
    }
    "^Keep original:" {
        $dbName = $baseName
    }
    "^Propose new name" {
        $entered = Read-Host -Prompt "📝 Enter custom database name"
        $dbName = if ([string]::IsNullOrWhiteSpace($entered)) { $baseName } else { $entered }
    }
    default {
        Write-Host "❌ Invalid selection. Aborting." -ForegroundColor Red
        exit 1
    }
}

# 🛠️ Load connection info from store
. "$env:BORG_ROOT\config\globalfn.ps1"

$server = GetBorgStoreValue -Chapter docker -Key sqlinstance
$username = GetBorgStoreValue -Chapter docker -Key sqluser
$password = GetBorgStoreValue -Chapter docker -Key sqlpassword

if (-not $server -or -not $username -or -not $password) {
    Write-Host "❌ Missing SQL connection configuration in store. Please check chapter 'docker'." -ForegroundColor Red
    exit 1
}

$connectionString = "Server=$server;Database=$dbName;User Id=$username;Password=$password;TrustServerCertificate=True"

# 🚀 Execute import
Write-Host ""
Write-Host "🚀 Importing '$dbName' using sqlpackage.exe..." -ForegroundColor Cyan

& $sqlPackageCmd /Action:Import /SourceFile:"$BacpacPath" /TargetConnectionString:"$connectionString"

if ($LASTEXITCODE -ne 0) {
    Write-Host "❌ Import failed. Please check the output above." -ForegroundColor Red
    exit 1
}

Write-Host ""
Write-Host "✅ Database '$dbName' imported successfully!" -ForegroundColor Green