(include "lib/lisp-macro.scm")
(include "lib/bot.scm")
(import (chicken process-context))

(rule (maybe x) (x) (""))
(rule (maybe_ x) (x " "))
(rule (maybe* x) ((x)) (""))
(rule (maybe_* x) ((x) " ") (""))

(define cat string-append)
(define-macro (* . body)
  (let ([sg (car body)]
        [pl (cadr body)])
    `(if (eq? *n 'sg) ,sg ,pl)))

(rule (language)
      ("brainfuck")
      ("JavaScript")
      ("ECMAscript")
      ("FORTRAN")
      ("COBOL")
      ("Delphi")
      ("Visual Basic")
      ("assembly")
      ("QBasic")
      ("vimscript")
      ("bash")
      ("shell")
      ("C++")
      ("Java")
      ("Node")
      ("WebAssembly")
      ("Scheme")
      ("Clojure")
      ("ASP.NET")
      ("Pascal"))

(rule (bigotry)
      ("ECMAphobia")
      (prefix (one-of "phobia" "misia"))
      ((language) "-" (one-of "phobia" "misia")))

(rule (prefix)
      ("neo")
      ("neo-")
      ("retro")
      ("hypno")
      ("meta")
      ("retro")
      ("psycho")
      ("post")
      ("diablo")
      ("crypto")
      ("erotic "))

(rule (noun)
      ("freedom")
      ("courage")
      ("pride")
      ("hate")
      ("fascism")
      ("whiteness")
      ("orgone"))

(rule (adj)
      ("retro")
      ("male")
      ("white")
      ("decentralized")
      ("non-profit")
      ("for-profit")
      ("anti-" (@ ((clade 'sg)) ((noun))))
      ((clade 'sg) (one-of "-phobic" "-misic")))

(rule (trans)
      ("alienware")
      ("process")
      ("capitalist")
      ("charset")
      ("digital")
      ("POSIX"))

(rule (axis)
      ("stunning and brave")
      ("furry")
      ("cyberqueer")
      ((one-of "strongly"
          "statically"
          "dynamically") "-typed")
      ("trans" (trans))
      ("read-only")
      ("spinlocked"))

(rule (kin)
      ("latin-1")
      ("Shift JIS")
      ("KOI8-R")
      ("POSIX")
      ("FAT32")
      ("ext2")
      ("ext3")
      ("ZFS")
      ("systemd-")
      ("other")
      ("GNU")
      ("Stallman")
      ("Torvalds")
      ("cyber")
      ("intel")
      ("x86-")
      ("RISC")
      ("PowerPC-")
      ("sudoer")
      ("null")
      ("void")
      ("root"))

(rule (tyranny)
      ("FurAffinity")
      ("North Korea")
      ("the USSR")
      ("Canada")
      ("Minecraft")
      ("Pewdiepie")
      ("T-Series")
      ("Buzzfeed")
      ("VICE")
      ("Fortnite"))

(rule (environment)
      ("VR")
      ("Minecraft")
      ("YouTube")
      ("4chan"))
      
(rule (job)
      ("journalist")
      ("meme technician")
      ("plumber")
      ("electrician")
      ("masseuse")
      ("beautician")
      ("stylist")
      ("janitor")
      ("heating engineer")
      ("camgirl")
      ("carpenter"))

(rule (clade *n)
      ((* "depth-groveler" "depth-grovelers"))
      ((* "latin✘" "latin✘s"))
      ((* "latin@" "latin@s"))
      ((* "transradical" "transradicals"))
      ((* "biracial" "biracials"))
      ((* "bisexual" "bisexuals"))
      ((* "bimetallic" "bimetallics"))
      ((* "orphan" "orphans"))
      ((* "gamer" "gamers"))
      ((* "male feminist" "male feminists"))
      ((maybe (cat (tyranny) " "))
       (maybe (prefix)) (* "refugee" "refugees"))
      ((environment) " " (job) "s")
      ((* "HTML #000" "HTML #000s"))
      ((* "NPC" "NPCs"))
      ((kin) "kin"))

(rule (value)
      ((clade 'sg) " pride")
      ((clade 'sg) " " (noun)))

(rule (faction)
      ("Jordan Peterson")
      ("radical centrist")
      ("epic gamer")
      ("leftbook")
      ("memelord")
 )

(rule (orgtype)
      ("commune")
      ("think tank")
      ("superPAC")
      ("co-op")
      ("collective")
      ("for-profit")
      ((one-of "death squad" "militia" "brigade"))
      ((one-of "defense" "private military") " "
        "contractor")
      ("non-profit"))

(rule (org)
      ((maybe_* adj) (maybe_* faction)
       (maybe (prefix)) (orgtype)))

(rule (woke-product)
      ((org) " for " (clade 'pl))
      
      ((clade 'sg) " " (language) " " (maybe (prefix)) (orgtype)))

(display (string-append (woke-product) "\n"))
