param(
    [Parameter(Mandatory=$true)]
    [string]$TableName
)

function Install-RequiredModules {
    $requiredModule = "SqlServer"
    
    if (-not (Get-Module -ListAvailable -Name $requiredModule)) {
        Write-Host "Installazione modulo $requiredModule..."
        try {
            Install-Module -Name $requiredModule -Force -AllowClobber -Scope CurrentUser
        }
        catch {
            Write-Error "Errore durante l'installazione del modulo $requiredModule. Eseguire PowerShell come amministratore e riprovare."
            exit 1
        }
    }
}

# Verifica e installa moduli necessari
Install-RequiredModules

# Importa configurazione
. "$PSScriptRoot\conf.ps1"

$OutputFile = Join-Path $PSScriptRoot "..\extract\$TableName.csv"

$Query = "SELECT * FROM $TableName"

try {
    # Import SQL Server module if not already loaded
    if (-not (Get-Module -Name SqlServer)) {
        Import-Module SqlServer
    }

    Write-Host "Connessione a $env:dbHostInput, database $env:dbName..."
    
    # Esegui la query e salva i risultati
    $result = Invoke-Sqlcmd -ServerInstance $env:dbHostInput `
                           -Database $env:dbName `
                           -Username $env:dbUser `
                           -Password $env:dbPassword `
                           -TrustServerCertificate `
                           -Query $Query
    
    if ($result) {
        $result | Export-Csv -Path $OutputFile -NoTypeInformation -Delimiter ";" -Encoding UTF8
    } else {
        throw "Nessun dato trovato nella tabella $TableName"
    }
    
    Write-Host "Dati esportati con successo in: $OutputFile"
}
catch {
    Write-Error "Errore durante l'estrazione dei dati: $_"
    exit 1
}
