<#
Nama Script   : FolderTreePrinter.ps1
 
Deskripsi     : 
Script ini menampilkan struktur folder dan subfolder dari direktori yang dipilih user, 
dengan opsi cetak semua subfolder, batal, atau cetak sampai level kedalaman tertentu.
 
Alur User     :
1. User memasukkan path folder Unity Projects.
2. Script validasi apakah path ada, jika tidak minta ulang.
3. User memasukkan opsi cetak:
   - Y: Cetak semua folder dan subfolder.
   - N: Batal dan kembali ke input path folder.
   - Angka: Cetak folder sampai level kedalaman sesuai angka.
4. Script menampilkan struktur folder sesuai input.
5. Jika batal (N), kembali ke langkah 1.
6. Jika cetak selesai, script berhenti.
 
#>
 
# 📂 Input path folder project Unity
do {
    $targetFolder = Read-Host "📂 Masukkan path folder Unity Projects (contoh: D:\Project)"
    if (-not (Test-Path $targetFolder)) {
        Write-Host "`n❌ Path tidak ditemukan. Periksa kembali!" -ForegroundColor Red
        $retry = $true
    } else {
        $retry = $false
    }
} while ($retry)
 
function Print-FolderTree {
    param (
        [string]$Path,
        [int]$Level = 0,
        [int]$MaxLevel = -1
    )
    
    if ($MaxLevel -ne -1 -and $Level -ge $MaxLevel) {
        return
    }
 
    $folders = Get-ChildItem -Path $Path -Directory | Sort-Object Name
    
    foreach ($folder in $folders) {
        Write-Host ("`t" * $Level) + $folder.Name
        Print-FolderTree -Path $folder.FullName -Level ($Level + 1) -MaxLevel $MaxLevel
    }
}
 
do {
    $inputLevel = Read-Host "Cetak semua subfolder? (Y = semua, N = batal, atau masukkan angka level kedalaman)"
    $inputLevel = $inputLevel.Trim().ToLower()
 
    if ($inputLevel -eq 'y') {
        Write-Host "`n📁 Struktur folder di: $targetFolder`n" -ForegroundColor Green
        Write-Host $targetFolder
        Print-FolderTree -Path $targetFolder
        break
    }
    elseif ($inputLevel -eq 'n') {
        Write-Host "❌ Proses dibatalkan. Silakan mulai ulang pemilihan folder." -ForegroundColor Yellow
        # Ulang ke pemilihan folder
        do {
            $targetFolder = Read-Host "📂 Masukkan path folder Unity Projects (contoh: D:\Project)"
            if (-not (Test-Path $targetFolder)) {
                Write-Host "`n❌ Path tidak ditemukan. Periksa kembali!" -ForegroundColor Red
                $retry = $true
            } else {
                $retry = $false
            }
        } while ($retry)
    }
    elseif ([int]::TryParse($inputLevel, [ref]$null)) {
        $maxLevel = [int]$inputLevel
        if ($maxLevel -le 0) {
            Write-Host "⚠️ Masukkan angka lebih besar dari 0." -ForegroundColor Yellow
        } else {
            Write-Host "`n📁 Struktur folder di: $targetFolder (level kedalaman: $maxLevel)`n" -ForegroundColor Green
            Write-Host $targetFolder
            Print-FolderTree -Path $targetFolder -MaxLevel $maxLevel
            break
        }
    }
    else {
        Write-Host "❌ Input tidak valid. Masukkan 'Y', 'N', atau angka." -ForegroundColor Red
    }
} while ($true)