param(
    [string]$TaskName = "STRATO Log Batch taeglich",
    [string]$RunAt = "06:31"
)

$ErrorActionPreference = "Stop"

$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
$Runner = Join-Path $Root "strato_batch_task.ps1"

if (-not (Test-Path -LiteralPath $Runner)) {
    throw "Aufgaben-Wrapper nicht gefunden: $Runner"
}

$null = powershell.exe -NoProfile -ExecutionPolicy Bypass -File $Runner -SelfTest
if ($LASTEXITCODE -ne 0) {
    throw "Selftest des Aufgaben-Wrappers fehlgeschlagen."
}

$PowerShellExe = Join-Path $env:SystemRoot "System32\WindowsPowerShell\v1.0\powershell.exe"
$taskCommand = "`"$PowerShellExe`" -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$Runner`""

try {
    $action = New-ScheduledTaskAction `
        -Execute $PowerShellExe `
        -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$Runner`""

    $trigger = New-ScheduledTaskTrigger -Daily -At $RunAt

    $user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    $principal = New-ScheduledTaskPrincipal `
        -UserId $user `
        -LogonType Interactive `
        -RunLevel LeastPrivilege

    $settings = New-ScheduledTaskSettingsSet `
        -StartWhenAvailable `
        -AllowStartIfOnBatteries `
        -DontStopIfGoingOnBatteries `
        -ExecutionTimeLimit (New-TimeSpan -Hours 2) `
        -MultipleInstances IgnoreNew

    Register-ScheduledTask `
        -TaskName $TaskName `
        -Action $action `
        -Trigger $trigger `
        -Principal $principal `
        -Settings $settings `
        -Description "Laedt STRATO-Logfiles still im Hintergrund. Meldet sich nur per Fenster, wenn Fehler auftreten." `
        -Force | Out-Null

    Get-ScheduledTask -TaskName $TaskName | Select-Object TaskName, State
}
catch {
    Write-Warning "ScheduledTasks-Cmdlets nicht nutzbar, verwende schtasks.exe: $($_.Exception.Message)"
    Write-Warning "Hinweis: Der schtasks.exe-Fallback setzt 'StartWhenAvailable' nicht zuverlaessig. Wenn der Start um $RunAt verpasst wird, die Aufgabe bei Bedarf manuell starten oder in der Aufgabenplanung pruefen."
    $args = @(
        "/Create",
        "/TN", $TaskName,
        "/TR", $taskCommand,
        "/SC", "DAILY",
        "/ST", $RunAt,
        "/RL", "LIMITED",
        "/IT",
        "/F"
    )
    $output = & schtasks.exe @args 2>&1
    $exit = $LASTEXITCODE
    $output
    if ($exit -ne 0) {
        throw "schtasks.exe fehlgeschlagen mit Exitcode $exit."
    }
    & schtasks.exe /Query /TN $TaskName /FO LIST
}
