<#
Nama Script   : FolderTreePrinterWithTabsOnly.ps1
 
Deskripsi     : 
Script ini menampilkan struktur folder DAN FILE dari direktori yang dipilih user,
dengan indentasi menggunakan TAB beneran → tanpa prefix L / icon.
Hanya tampil di console → TIDAK generate .txt.
Format:
folderutama
    subfolder
        subsubfolder
            file.txt
file.txt
#>
 
# 📂 Input path folder project
do {
    $targetFolder = Read-Host "📂 Masukkan path folder (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-FolderTreeWithFiles {
    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) {
        # BIKIN TAB BENERAN
        $indent = ""
        for ($i = 0; $i -lt $Level; $i++) { $indent += "`t" }
 
        $lineFolder = "$indent$($folder.Name)"
        Write-Host $lineFolder
 
        Print-FolderTreeWithFiles -Path $folder.FullName -Level ($Level + 1) -MaxLevel $MaxLevel
    }
 
    $files = Get-ChildItem -Path $Path -File | Sort-Object Name
    foreach ($file in $files) {
        $indent = ""
        for ($i = 0; $i -lt $Level; $i++) { $indent += "`t" }
 
        $lineFile = "$indent$($file.Name)"
        Write-Host $lineFile
    }
}
 
do {
    $inputLevel = Read-Host "Cetak semua subfolder + file? (Y = semua, N = batal, atau masukkan angka level kedalaman)"
    $inputLevel = $inputLevel.Trim().ToLower()
 
    if ($inputLevel -eq 'y') {
        Write-Host "`nStruktur folder + file di: $targetFolder`n" -ForegroundColor Green
        Write-Host $targetFolder
        Print-FolderTreeWithFiles -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 (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 "`nStruktur folder + file di: $targetFolder (level kedalaman: $maxLevel)`n" -ForegroundColor Green
            Write-Host $targetFolder
            Print-FolderTreeWithFiles -Path $targetFolder -MaxLevel $maxLevel
            break
        }
    }
    else {
        Write-Host "❌ Input tidak valid. Masukkan 'Y', 'N', atau angka." -ForegroundColor Red
    }
} while ($true)