#!/usr/bin/env rund
void main( string[] args ) {
  import std;
  if (args.length > 1) {
    string base_fn_path = args[1].expandTilde;
    string base_fn = base_fn_path.baseName;
    string sst_fn = base_fn ~ ".sst";
    string txt_for_pod_manifest = format(q"┃doc:
  filename: %s
  language: en
┃",
      sst_fn
    );
    string txt_for_sisu_document_make = format(q"┃
┃",
    );
    string txt_for_document_scaffold = format(q"┃# SiSU 8.0

title: "As Yet Unnamed"

creator:
  author: "Annon, Unnamed"

:A~ @title @author

1~ Summary

To get you started, the first paragraph following a section or chapter heading.

Spine / SiSU documents minimum requirements:

_* a header containing document metadata that must at least contain the fields Title and Creator Author.

_* text body, identified as starting by the A~ marker at the start of a line, followed  by at least one level 1~ section heading with the text that follows it.~{ the document provided here would be a valid Spine document, and this text contained within the tilde and curly braces delimiters would be the first footnote/endnote }~

To generate this document to have html and epub output for example you would run:

``` code
spine --html --epub --output=/tmp/spine-sample-output %s
```

1~ Conclusion

This sample pod is provided to get you started.

Good luck and good speed.
┃",
      base_fn_path
    );
    if (!exists(base_fn_path)) {
      try {
        base_fn_path.mkdirRecurse;
      } catch (ErrnoException ex) {
        writeln(ex);
      }
      if (exists(args[1].expandTilde)) {
        try {
          base_fn_path.buildPath("conf").mkdirRecurse;
        } catch (ErrnoException ex) {
          writeln(ex);
        }
        try {
          base_fn_path.buildPath("media/text/en").mkdirRecurse;
        } catch (ErrnoException ex) {
          writeln(ex);
        }
        {
          // 1 // create/write pod.manifest
          string fn = base_fn_path.buildPath("pod.manifest");
          File(fn, "w").writeln(txt_for_pod_manifest);
          string tell = format(q"┃OK - pod.manifest (yaml file containing filename and languages)
  %s
%s
┃",
            fn,
            txt_for_pod_manifest.strip
          );
          writeln(tell);
        }
        if (exists(base_fn_path.buildPath("conf"))) {
          // 2 // create/write conf/sisu_document_make
          string fn = base_fn_path.buildPath("conf/sisu_document_make");
          File(fn, "w").writeln(txt_for_sisu_document_make);
          // auto f = File(fn, "w");
          // foreach (line; content_array) {
          //   f.writeln(line);
          // }
          string tell = format(q"┃OK - sisu_document_make
  %s
┃",
            fn
          );
          writeln(tell);
        }
        if (exists(base_fn_path.buildPath("media/text/en"))) {
          // 3 // create/write media/text/[lang code]/[filename].sst
          string fn = base_fn_path.buildPath("media/text/en/" ~ sst_fn);
          File(fn, "w").writeln(txt_for_document_scaffold);
          // auto f = File(fn, "w");
          // foreach (line; content_array) {
          //   f.writeln(line);
          // }
          string tell = format(q"┃OK - .sst [document text content]
  %s
  - To start editing document (spine pod content):
      ${EDITOR} %s
  - To generate this document to have html and epub output for example you would run:
      spine --html --epub --output=/tmp/spine-sample-output %s
┃",
            fn,
            fn,
            base_fn_path
          );
          writeln(tell);
        }
      }
      /+
        pod/[filename]
          │
          ├── conf
          │   └── sisu_document_make
          ├── media
          │   └── text
          │       └── en
          │           └── [filename].charles_stross.sst
          └── pod.manifest
      +/
    } else {
      writeln("requested output pod name with path already exists:\n  ", args[1].expandTilde);
    }
  } else {
    writeln( "please provide directory path to operate on, e.g.\n  spine_scaffold.d ./pod/filetest" );
  }
}