use v6.e.PREVIEW;

#| Post database
unit module DB;

use Pandoc;
use JSON::Class:auth<zef:vrurg>;

#| Shared post meta-data
role Post is json {
    #| The location of the source file for the post
    has IO::Path:D $.source is required;
    #| The time to display for the creation of the post
    has DateTime:D $.posted-at is required;
    #| An optional list of edit times for the post
    has DateTime:D @.edited-at is rw = [];

    #| Get the title for this post, intended to be extracted from whatever
    #| document produced it
    method title(--> Str:D) {...}
}

#| A plain markdown post
class MarkdownPost does Post is json {
    #| Marker for disambiguation between post types in json representation, the
    #| cheaty way
    has Bool:D $.markdown = True;

    method title(--> Str:D) {
        markdown-title($!source)
    }
}

# #| A literate idris post in markdown format
# class IdrisPost does Post {

#     method title(--> Str:D) {
#         markdown-title($!source)
#     }
# }

#| The top level posts database
class PostDB is json(:pretty) {
   #| A mapping from post ids to posts
   has Hash[Int:D, Post:D] %.posts = %();
}