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

# Imposta il percorso di output nella cartella sql
$OutputPath = Join-Path $env:workdir "sql\stored"

# Verifica che la directory di output esista, altrimenti la crea
if (-not (Test-Path -Path $OutputPath)) {
    New-Item -ItemType Directory -Path $OutputPath | Out-Null
}

# Query per estrarre le stored procedures
$query = @"
SELECT 
    OBJECT_SCHEMA_NAME(object_id) as SchemaName,
    OBJECT_NAME(object_id) as ProcedureName,
    OBJECT_DEFINITION(object_id) as ProcedureDefinition
FROM sys.procedures
ORDER BY SchemaName, ProcedureName
"@

try {
    # Importa il modulo SqlServer se non è già caricato
    if (-not (Get-Module -Name SqlServer)) {
        Import-Module SqlServer
    }

    # Esegui la query per ottenere le stored procedures
    $storedProcedures = Invoke-Sqlcmd -ServerInstance $env:dbHostInput -Database $env:dbName -Query $query -Username $env:dbUser -Password $env:dbPassword

    # Per ogni stored procedure trovata
    foreach ($sp in $storedProcedures) {
        $schemaName = $sp.SchemaName
        $procName = $sp.ProcedureName
        $definition = $sp.ProcedureDefinition

        # Crea il nome del file
        $fileName = Join-Path $OutputPath "${schemaName}_${procName}.sql"

        # Scrivi il contenuto nel file
        $content = @"
-- Schema: $schemaName
-- Stored Procedure: $procName
-- Data Estrazione: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss")

$definition
"@
        $content | Out-File -FilePath $fileName -Encoding UTF8

        Write-Host "Creato file per stored procedure: $schemaName.$procName"
    }

    Write-Host "`nEstrazione completata con successo!"
} catch {
    Write-Error "Errore durante l'estrazione delle stored procedures: $_"
    exit 1
}
