#!/usr/bin/env nu

# Add module-level docstrings to all .nu files
#
# Scans all .nu files and adds module-level docstrings to those missing them

use std log

def main [--dry-run = false --verbose = false] {
    log info "Starting module docstring addition..."

    let nu_files = (find /Users/Akasha/project-provisioning/provisioning -name "*.nu" -type f | lines)
    let mut files_processed = 0
    let mut files_updated = 0
    let mut files_skipped = 0

    for file in $nu_files {
        let content = open $file
        let has_module_doc = ($content =~ '(?m)^# [A-Z].*\n#')

        if not $has_module_doc and ($content | str starts-with "#!/usr/bin/env nu") {
            # File has shebang but no module docstring
            if $verbose {
                log info $"Adding docstring to: ($file)"
            }

            if not $dry_run {
                # Extract module name from filename
                let filename = ($file | path basename | str replace '.nu' '')
                let module_name = ($filename | str replace '-' '_' | str capitalize)

                # Add module docstring after shebang
                let lines = $content | lines
                let new_content = (
                    ($lines | first 1 | str join "\n") + "\n\n# " + $module_name + "\n" +
                    ($lines | skip 1 | str join "\n")
                )

                $new_content | save --force $file
                $files_updated += 1
            } else {
                $files_updated += 1
            }
        } else {
            $files_skipped += 1
        }

        $files_processed += 1
    }

    log info $"Processing complete. Processed: ($files_processed), Updated: ($files_updated), Skipped: ($files_skipped)"
}

main
