PaperinikDB.psm1

# PaperinikDB Module Loader
# Detects .NET version and loads appropriate assemblies

$libPath = "$PSScriptRoot\lib"

# Determine the best available .NET framework library to load
$runtimeMajor = [System.Environment]::Version.Major

# Build candidates from best match down; pick the first whose DLLs actually exist
$targetFramework = @(
    if ($runtimeMajor -ge 10) { 'net10' }
    if ($runtimeMajor -ge 8) { 'net8' }
    if ($runtimeMajor -ge 6) { 'net6' }
) | Where-Object { Test-Path "$libPath\$_\DuckDB.NET.Data.dll" } | Select-Object -First 1

# Set up native library path for duckdb.dll
# DuckDB.NET needs to find the native library at runtime
$nativeLibPath = if (Test-Path "$libPath\core") {
    "$libPath\core"
} else {
    $libPath
}

# Add native library path to PATH so DuckDB.NET can find duckdb.dll
if ($env:PATH -notlike "*$nativeLibPath*") {
    $env:PATH = "$nativeLibPath;$env:PATH"
}

# Load DuckDB.NET assemblies from appropriate location
if ($targetFramework) {
    # Load from versioned subdirectory (existence already verified above)
    Add-Type -Path "$libPath\$targetFramework\DuckDB.NET.Data.dll"
    Add-Type -Path "$libPath\$targetFramework\DuckDB.NET.Bindings.dll"
    Write-Verbose "Loaded DuckDB.NET assemblies from lib/$targetFramework (native from lib/core)"
} else {
    # Fallback to root lib directory (backward compatibility)
    Add-Type -Path "$libPath\DuckDB.NET.Data.dll"
    Add-Type -Path "$libPath\DuckDB.NET.Bindings.dll"
    Write-Verbose 'Loaded DuckDB.NET assemblies from lib/'
}

. $PSScriptRoot\Public\New-DuckDBConnectionWithFunctions.ps1