/++
Copyright 2022 Jeffrey Sonstein

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
++/

import std.stdio;
import std.conv;
import std.json;

import activitystreams.vocabulary.coretypes;
import activitystreams.vocabulary.activitytypes;
import activitystreams.vocabulary.actortypes;
import activitystreams.vocabulary.objectandlinktypes;

void main() {
  writeln( "2. Core Types" );

  write( "  BaseObject:");
  auto a = new BaseObject();
  a.setProperty( "id", "a" );
  writeln( a.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Link: " );
  auto b = new Link();
  b.setProperty( "id", "b" );
  writeln( b.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Activity:");
  auto c = new Activity();
  c.setProperty( "id", "c" );
  writeln( c.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  IntransitiveActivity:" );
  auto d = new IntransitiveActivity();
  d.setProperty( "id", "d" );
  writeln( d.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Collection:" );
  auto e = new Collection();
  e.setProperty( "id", "e" );
  writeln( e.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  OrderedCollection:" );
  auto f = new OrderedCollection();
  f.setProperty( "id", "f" );
  writeln( f.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  CollectionPage:" );
  auto g = new CollectionPage();
  g.setProperty( "id", "g" );
  writeln( g.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  OrderedCollectionPage:" );
  auto h = new OrderedCollectionPage();
  h.setProperty( "id", "h" );
  writeln( h.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  writeln( "3. Extended Types" );

  writeln( "3.1 Activity Types" );

  write( "  Accept:" );
  auto i = new Accept();
  i.setProperty( "id", "i" );
  writeln( i.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  TentativeAccept:" );
  auto j = new TentativeAccept();
  j.setProperty( "id", "j" );
  writeln( j.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Add:" );
  auto k = new Add();
  k.setProperty( "id", "k" );
  writeln( k.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Arrive:" );
  auto l = new Arrive();
  l.setProperty( "id", "l" );
  writeln( l.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Create:" );
  auto m = new Create();
  m.setProperty( "id", "m" );
  writeln( m.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Delete:" );
  auto n = new Delete();
  n.setProperty( "id", "n" );
  writeln( n.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Follow:" );
  auto o = new Follow();
  o.setProperty( "id", "o" );
  writeln( o.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Ignore:" );
  auto p = new Ignore();
  p.setProperty( "id", "p" );
  writeln( p.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Join:" );
  auto q = new Join();
  q.setProperty( "id", "q" );
  writeln( q.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Leave:" );
  auto r = new Leave();
  r.setProperty( "id", "r" );
  writeln( r.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Like:" );
  auto s = new Like();
  s.setProperty( "id", "s" );
  writeln( s.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Offer:" );
  auto t = new Offer();
  t.setProperty( "id", "t" );
  writeln( t.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Invite:" );
  auto u = new Invite();
  u.setProperty( "id", "u" );
  writeln( u.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Reject:" );
  auto v = new Reject();
  v.setProperty( "id", "v" );
  writeln( v.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  TentativeReject:" );
  auto w = new TentativeReject();
  w.setProperty( "id", "w" );
  writeln( w.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Remove:" );
  auto x = new Remove();
  x.setProperty( "id", "x" );
  writeln( x.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Undo:" );
  auto y = new Undo();
  y.setProperty( "id", "y" );
  writeln( y.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Update:" );
  auto z = new Update();
  z.setProperty( "id", "z" );
  writeln( z.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  View:" );
  auto aa = new View();
  aa.setProperty( "id", "aa" );
  writeln( aa.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Listen:" );
  auto bb = new Listen();
  bb.setProperty( "id", "bb" );
  writeln( bb.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Read:" );
  auto cc = new Read();
  cc.setProperty( "id", "cc" );
  writeln( cc.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Move:" );
  auto dd = new Move();
  dd.setProperty( "id", "dd" );
  writeln( dd.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Travel:" );
  auto ee = new Travel();
  ee.setProperty( "id", "ee" );
  writeln( ee.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Announce:" );
  auto ff = new Announce();
  ff.setProperty( "id", "ff" );
  writeln( ff.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Block:" );
  auto gg = new Block();
  gg.setProperty( "id", "gg" );
  writeln( gg.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Flag:" );
  auto hh = new Flag();
  hh.setProperty( "id", "hh" );
  writeln( hh.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Dislike:" );
  auto ii = new Dislike();
  ii.setProperty( "id", "ii" );
  writeln( ii.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Question:" );
  auto jj = new Question();
  jj.setProperty( "id", "jj" );
  writeln( jj.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  writeln( "3.2 Actor Types" );

  write( "  Application:" );
  auto kk = new Application();
  kk.setProperty( "id", "kk" );
  writeln( kk.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Group:" );
  auto ll = new Group();
  ll.setProperty( "id", "ll" );
  writeln( ll.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Organization:" );
  auto mm = new Organization();
  mm.setProperty( "id", "mm" );
  writeln( mm.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Person:" );
  auto nn = new Person();
  nn.setProperty( "id", "nn" );
  writeln( nn.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Service" );
  auto oo = new Service();
  oo.setProperty( "id", "oo" );
  writeln( oo.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  writeln( "3.3 Object and Link Types" );

  write( "  Relationship:" );
  auto pp = new Relationship();
  pp.setProperty( "id", "pp" );
  writeln( pp.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Article:" );
  auto qq = new Article();
  qq.setProperty( "id", "qq" );
  writeln( qq.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Document:" );
  auto rr = new Document();
  rr.setProperty( "id", "rr" );
  writeln( rr.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Relationship:" );
  auto ss = new Relationship();
  ss.setProperty( "id", "ss" );
  writeln( pp.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Article:" );
  auto tt = new Article();
  tt.setProperty( "id", "tt" );
  writeln( tt.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Document:" );
  auto uu = new Document();
  uu.setProperty( "id", "uu" );
  writeln( uu.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Audio:" );
  auto vv = new Audio();
  vv.setProperty( "id", "vv" );
  writeln( vv.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Image:" );
  auto ww = new Image();
  ww.setProperty( "id", "ww" );
  writeln( ww.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Video:" );
  auto xx = new Video();
  xx.setProperty( "id", "xx" );
  writeln( xx.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Note:" );
  auto yy = new Note();
  yy.setProperty( "id", "yy" );
  writeln( yy.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Page:" );
  auto zz = new Page();
  zz.setProperty( "id", "zz" );
  writeln( zz.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Event:" );
  auto aaa = new Event();
  aaa.setProperty( "id", "aaa" );
  writeln( aaa.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Place:" );
  auto bbb = new Place();
  bbb.setProperty( "id", "bbb" );
  writeln( bbb.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Mention:" );
  auto ccc = new Mention();
  ccc.setProperty( "id", "ccc" );
  writeln( ccc.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Profile:" );
  auto ddd = new Profile();
  ddd.setProperty( "id", "ddd" );
  writeln( ddd.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );

  write( "  Tombstone:" );
  auto eee = new Tombstone();
  eee.setProperty( "id", "eee" );
  writeln( eee.getCurrent().toString( JSONOptions.doNotEscapeSlashes ) );


}
