<#
.SYNOPSIS
  Recupera utenti GitLab per ID 1-100 e scrive output in C:\Steamware\Logs\Gitlab\gitlab_users_1-100.log
#> 

#importo file contenente configurazioni
. .\ApiGit\ApiGitResources\ApiScriptsConfig.ps1
#importo file contenente funzioni 
. .\ApiGit\ApiGitResources\ApiScriptsFunctions.ps1

$GitlabUrl = "gitlab.steamware.net"
$PrivateToken = $tokenGitlab

# Configurazione
$StartId = 1
$EndId = 50
$LogDir = "C:\Steamware\Logs\Gitlab"
$LogFile = Join-Path -Path $LogDir -ChildPath "GitlabUsers.log"

# Crea cartella log se non esiste
try {
    if (-not (Test-Path -Path $LogDir)) {
        New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
    }
}
catch {
    Write-Error "Impossibile creare la cartella di log $LogDir. Errore: $($_.Exception.Message)"
    exit 1
}

# Header autenticazione
$baseUrl = $GitlabUrl.TrimEnd('/')
$headers = @{ "PRIVATE-TOKEN" = $PrivateToken }

# Inizializza file di log (sovrascrive se esiste)
$startLine = "INFO [{0}] Starting GitLab users retrieval for IDs {1}-{2}" -f (Get-Date -Format o), $StartId, $EndId
$startLine | Out-File -FilePath $LogFile -Encoding UTF8

$retrieved = 0
$errors = 0

# inizializza contatore per numeratore
$counter = 1
$total = $EndId - $StartId + 1

for ($id = $StartId; $id -le $EndId; $id++) {
    $url = "$baseUrl/api/v4/users/$id"
    # crea prefisso numerato e separatore (es. --- 001/100 ---)
    $num = "{0:D3}" -f $counter
    $separator = "----- $num/$total -----"

    try {
        $user = Invoke-RestMethod -Uri $url -Headers $headers -Method Get -ErrorAction Stop
        $json = $user | ConvertTo-Json -Depth 10 -Compress
        $line = "{0} `nINFO [{1}] USER_FOUND id={2} data={3}" -f $separator, (Get-Date -Format o), $id, $json
        $line | Out-File -FilePath $LogFile -Encoding UTF8 -Append
        $retrieved++
    }
    catch {
        $status = "unknown"
        try {
            if ($_.Exception.Response -ne $null) {
                $status = $_.Exception.Response.StatusCode.value__
            }
        } catch { $status = "unknown" }

        if ($status -eq 404) {
            $line = "{0} `nWARN  [{1}] USER_NOT_FOUND id={2} status=404 message=Not Found" -f $separator, (Get-Date -Format o), $id
        }
        else {
            $msg = $_.Exception.Message -replace "`r?`n", " "
            $line = "{0} `nERROR [{1}] USER_ERROR id={2} status={3} message={4}" -f $separator, (Get-Date -Format o), $id, $status, $msg
        }
        $line | Out-File -FilePath $LogFile -Encoding UTF8 -Append
        $errors++
    }

    $counter++
    Start-Sleep -Milliseconds 200
}

$endLine = "INFO [{0}] Completed. Retrieved={1} Errors={2}" -f (Get-Date -Format o), $retrieved, $errors
$endLine | Out-File -FilePath $LogFile -Encoding UTF8 -Append

Write-Host "Fatto. Log salvato in $LogFile. Utenti recuperati: $retrieved. Errori: $errors."