# Codebase Analysis Script

Script to analyze the technology distribution in the provisioning codebase.

## Usage

### Basic Usage

```bash
# From provisioning directory (analyzes current directory)
cd provisioning
nu tools/analyze-codebase.nu

# From project root, analyze provisioning
nu provisioning/tools/analyze-codebase.nu --path provisioning

# Analyze any path
nu provisioning/tools/analyze-codebase.nu --path /absolute/path/to/directory
```

### Output Formats

```bash
# Table format (default) - colored, visual bars
nu provisioning/tools/analyze-codebase.nu --format table

# JSON format - for programmatic use
nu provisioning/tools/analyze-codebase.nu --format json

# Markdown format - for documentation
nu provisioning/tools/analyze-codebase.nu --format markdown
```

### From provisioning directory

```bash
cd provisioning
nu tools/analyze-codebase.nu
```

### Direct execution (if in PATH)

```bash
# Make it globally available (one time)
ln -sf "$(pwd)/provisioning/tools/analyze-codebase.nu" /usr/local/bin/analyze-codebase

# Then run from anywhere
analyze-codebase
analyze-codebase --format json
analyze-codebase --format markdown > CODEBASE_STATS.md
```

## Output

The script analyzes:

- **Nushell** (.nu files)
- **KCL** (.k files)
- **Rust** (.rs files)
- **Templates** (.j2, .tera files)

Across these sections:

- `core/` - CLI interface, core libraries
- `extensions/` - Providers, taskservs, clusters
- `platform/` - Rust services (orchestrator, control-center, etc.)
- `templates/` - Template files
- `kcl/` - KCL configuration schemas

## Example Output

### Table Format

```bash
📊 Analyzing Codebase: provisioning

📋 Lines of Code by Section

╭─────────────┬─────────┬────────────┬─────┬─────────┬─────┬──────────┬───────────┬───────────────┬───────────┬───────╮
│ section     │ nushell │ nushell_pct│ kcl │ kcl_pct │ rust│ rust_pct │ templates │ templates_pct │ total     │       │
├─────────────┼─────────┼────────────┼─────┼─────────┼─────┼──────────┼───────────┼───────────────┼───────────┼───────┤
│ core        │   53843 │      99.87 │  71 │    0.13 │   0 │     0.00 │         0 │          0.00 │     53914 │       │
│ extensions  │   10202 │      43.21 │3946 │   16.72 │   0 │     0.00 │      9456 │         40.05 │     23604 │       │
│ platform    │    5759 │       0.19 │   0 │    0.00 │2992107│  99.81 │         0 │          0.00 │   2997866 │       │
│ templates   │    4197 │      72.11 │ 834 │   14.33 │   0 │     0.00 │       789 │         13.56 │      5820 │       │
│ kcl         │       0 │       0.00 │5594 │  100.00 │   0 │     0.00 │         0 │          0.00 │      5594 │       │
╰─────────────┴─────────┴────────────┴─────┴─────────┴─────┴──────────┴───────────┴───────────────┴───────────┴───────╯

📊 Overall Technology Distribution

╭──────────────────────┬──────────┬────────────┬────────────────────────────────────────────────────╮
│ technology           │ lines    │ percentage │ visual                                             │
├──────────────────────┼──────────┼────────────┼────────────────────────────────────────────────────┤
│ Nushell              │    74001 │       2.40 │ █                                                  │
│ KCL                  │    10445 │       0.34 │                                                    │
│ Rust                 │  2992107 │      96.93 │ ████████████████████████████████████████████████   │
│ Templates (Tera)     │    10245 │       0.33 │                                                    │
╰──────────────────────┴──────────┴────────────┴────────────────────────────────────────────────────╯

📈 Total Lines of Code: 3086798
```

### JSON Format

```json
{
  "sections": [...],
  "totals": {
    "nushell": 74001,
    "kcl": 10445,
    "rust": 2992107,
    "templates": 10245,
    "grand_total": 3086798
  },
  "percentages": {
    "nushell": 2.40,
    "kcl": 0.34,
    "rust": 96.93,
    "templates": 0.33
  }
}
```

### Markdown Format

```bash
# Codebase Analysis

## Technology Distribution

| Technology | Lines | Percentage |
|------------|-------|------------|
| Nushell | 74001 | 2.40% |
| KCL | 10445 | 0.34% |
| Rust | 2992107 | 96.93% |
| Templates | 10245 | 0.33% |
| **TOTAL** | **3086798** | **100%** |
```

## Requirements

- Nushell 0.107.1+
- Access to the provisioning directory

## What It Analyzes

- ✅ All `.nu` files (Nushell scripts)
- ✅ All `.k` files (KCL configuration)
- ✅ All `.rs` files (Rust source)
- ✅ All `.j2` and `.tera` files (Templates)

## Notes

- The script recursively searches all subdirectories
- Empty sections show 0 for all technologies
- Percentages are calculated per section and overall
- Visual bars are proportional to percentage (max 50 chars = 100%)
