import tornado.ioloop
import tornado.web
import sys

indices = set()
min_index = sys.maxsize
max_index = -1

class StatusHandler(tornado.web.RequestHandler):
  def get(self):
    global indices
    global min_index
    global max_index
    if not indices:
      self.write('Not started yet')
      return
    expected = set(range(min_index, max_index + 1))
    diff = sorted(expected - indices)
    if diff:
      self.write(str(diff))
    else:
      self.write('OK')
    self.write(f'\r\nLatest received segment: {max_index}')

class PutHandler(tornado.web.RequestHandler):
  def put(self, *args, **kwargs):
    global indices
    global min_index
    global max_index
    name = args[0]
    index = int(name)
    indices.add(index)
    min_index = min(min_index, index)
    max_index = max(max_index, index)
    self.write('OK')

def make_app():
  return tornado.web.Application([
    (r"/status", StatusHandler),
    (r"/(\d+).ts$", PutHandler),
  ])

if __name__ == "__main__":
  port = 45000
  if len(sys.argv) > 1:
    try:
      port = int(sys.argv[1])
    except:
      print("Invalid port, using default 45000")
  app = make_app()
  app.listen(port)
  tornado.ioloop.IOLoop.current().start()
