import os.path
import json
import time
import datetime

_SYNC_INTV = 1.0 # sync interval in seconds

class Results:
    data = None
    path = None
    last_sync = datetime.datetime.fromtimestamp(time.mktime(time.gmtime(0))) # beginning of unix epoch

    def __init__(self, path):
        self.data = {}
        self.path = path
        if os.path.exists(path):
            with open(path) as f:
                self.data = json.load(f)
    
    def add(self, data_):
        self.data.update(data_)
        self._sync()
        
    def flush(self):
        self._sync(force=True)
    
    def _sync(self, force=False):
        now = datetime.datetime.now()
        if force or (now - self.last_sync).total_seconds() > _SYNC_INTV:
            self.last_sync = now
            with open(self.path, "w") as f:
                json.dump(self.data, f)