#!/usr/bin/env python3
"""
Trigger a replay import on a running viewstat server.

Usage:
  ./viewstat-import /path/to/logs [--url http://host:port] [--db IP]

Defaults:
  URL: http://localhost:5000
  DB:  server-side default honeypot (when --db is omitted)
"""
import argparse
import json
import os
import sys
import urllib.error
import urllib.parse
import urllib.request


def main():
  parser = argparse.ArgumentParser(description="Trigger viewstat replay import on a running server")
  parser.add_argument("path", help="Directory containing log.json files")
  parser.add_argument("--url", default=os.environ.get("VIEWSTAT_URL", "http://localhost:5000"), help="Base URL of viewstat API (default: %(default)s)")
  parser.add_argument("--db", default=None, help="Optional honeypot/database id (IP) to import into")
  args = parser.parse_args()

  base_url = args.url.rstrip("/")
  payload = {"path": args.path}
  if args.db:
    payload["db"] = args.db

  data = json.dumps(payload).encode("utf-8")
  url = base_url + "/api/replay"
  req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"}, method="POST")
  try:
    with urllib.request.urlopen(req) as resp:
      body = resp.read().decode("utf-8", errors="replace")
      print(body)
      if resp.status not in (200, 202):
        sys.exit(1)
  except urllib.error.HTTPError as e:
    sys.stderr.write(f"HTTP error {e.code}: {e.read().decode('utf-8', errors='replace')}\n")
    sys.exit(1)
  except urllib.error.URLError as e:
    sys.stderr.write(f"Request failed: {e}\n")
    sys.exit(1)


if __name__ == "__main__":
  main()

