#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import requests
import time
import json


def fread(filename):
    """Read file and close the file."""
    with open(filename, "r") as f:
        return f.read()


def get_comment_count():
    """Fetch the total number of comments from Stacosys API.

    Returns:
        int: Total comment count, or 0 if request fails
    """
    req_url = params["stacosys_url"] + "/comments/count"
    query_params = dict(
        token=params["stacosys_token"]
    )
    resp = requests.get(url=req_url, params=query_params)
    return 0 if not resp.ok else int(resp.json()["count"])


def _exit_program():
    """Exit the program with status code 0."""
    sys.exit(0)


# Default parameters.
params = {
    "stacosys_token": "",
    "stacosys_url": "",
    "external_check": "",
}

# If params.json exists, load it.
if os.path.isfile("params.json"):
    params.update(json.loads(fread("params.json")))

external_check_cmd = params["external_check"]
initial_count = get_comment_count()
print(f"Comments = {initial_count}")
while True:
    # check number of comments every 60 seconds
    for _ in range(15):
        time.sleep(60)
        if initial_count != get_comment_count():
            _exit_program()
    # check if git repo changed every 15 minutes
    if external_check_cmd and os.system(external_check_cmd):
        _exit_program()
