#!/usr/bin/env raku

use lib 'lib';
use Terminal::ANSI;

unit sub MAIN;

my $module = "Terminal::ANSI";
my $version = q:x[jq -r .version META6.json].trim or exit note 'no version';
my $repo-base = "https://git.sr.ht/~bduggan/raku-terminal-ansi/tree/$version";

sub get-exports($module) {
  use MONKEY-SEE-NO-EVAL;
  my @lines;
  my $sym = EVAL "{$module}::EXPORT::DEFAULT::";
  for $sym.keys -> $sub {
    my $s = $sym{$sub};
    @lines.push: {
      label => ($s.name ~ $s.signature.gist),
      desc => $s.WHY.Str,
      line => $s.WHY.WHEREFORE.line,
      file => $s.WHY.WHEREFORE.file,
    }
  }
  @lines;
}

sub function-docs($module) {
  my @out;
  my @lines = get-exports($module);
  for @lines.sort: *.<label> -> $l {
    @out.push: '[' ~ $l<label> ~ ']'
    ~ '(' ~
      $repo-base ~ $l<file>.words[0].subst("$*CWD",'')~ '#L' ~ $l<line>
    ~ ') ' ~ $l<desc>;
    @out.push: '';
  }
  @out;
}

my $file = 'lib/' ~ ($module.split('::').join('/')) ~ '.md';

my @out;
@out.push: "## $module";
@out.push: "";
@out.append: Terminal::ANSI.WHY.Str.split(/'─'/).map: *.trim;
@out.push: "";
@out.push: "## Exported Functions";
@out.push: "";
@out.append: function-docs($module);
$file.IO.spurt: @out.join("\n");

