#!/usr/bin/env python3

"""
fetch latest msg from guestbook and return as tag

example copyparty config to use this:
  --urlform save,get -vsrv/hello:hello:w:c,e2ts,mtp=guestbook=t10,ad,p,bin/mtag/guestbook-read.py:mte=+guestbook

explained:
  for realpath srv/hello (served at /hello), write-only for everyone,
  enable file analysis on upload (e2ts),
  use mtp plugin "bin/mtag/guestbook-read.py" to provide metadata tag "guestbook",
  do this on all uploads regardless of extension,
  t10 = 10 seconds timeout for each dwonload,
  ad = parse file regardless if FFmpeg thinks it is audio or not
  p = request upload info as json on stdin (need ip)
  mte=+guestbook enabled indexing of that tag for this volume

PS: this requires e2ts to be functional,
  meaning you need to do at least one of these:
   * apt install ffmpeg
   * pip3 install mutagen
"""


import json
import os
import sqlite3
import sys


# set 0 to allow infinite msgs from one IP,
# other values delete older messages to make space,
# so 1 only keeps latest msg
NUM_MSGS_TO_KEEP = 1


def main():
    fp = os.path.abspath(sys.argv[1])
    fdir = os.path.dirname(fp)

    zb = sys.stdin.buffer.read()
    zs = zb.decode("utf-8", "replace")
    md = json.loads(zs)

    ip = md["up_ip"]

    # can put the database inside `fdir` if you'd like,
    # by default it saves to PWD:
    # os.chdir(fdir)

    db = sqlite3.connect("guestbook.db3")
    with db:
        t = "select msg from gb where ip = ? order by ts desc"
        r = db.execute(t, (ip,)).fetchone()
        if r:
            print(r[0])


if __name__ == "__main__":
    main()
