#!/usr/bin/env python3

import argparse
import json
import logging
import os
import signal
import sys
import time

from bunch import Bunch

def handle_interrupt(sig, frame):
    global stop
    if os.getpid() == main_pid:
        logging.info( "Got stop signal." )
        stop = True

main_pid = os.getpid()
signal.signal(signal.SIGINT, handle_interrupt)
stop = False

parser = argparse.ArgumentParser(description='Photo Sort Daemon.')
parser.add_argument('config_file', type=str, help='path to config file')
parser.add_argument('-l', '--log-level', type=str, default='INFO', dest='log_lvl',
                    choices=['DEBUG', 'INFO', 'WARNING'], help='select log level')

args = parser.parse_args()

logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s',
                    level=logging.getLevelName(args.log_lvl),
                    datefmt='%m/%d/%Y %H:%M:%S')

status = 0

with open(args.config_file) as f:
    cfg = json.load(f)

bunch_idx = 1
bunches = []
for bunch_cfg in cfg['bunches']:
    bunches.append( Bunch(bunch_idx, cfg['cache_dir'], bunch_cfg) )
    bunch_idx += 1

for bunch in bunches:
    bunch.start()

while not stop:
    for bunch in bunches:
        if not bunch.is_running():
            stop = True
            status = 1
    time.sleep(2.0)

for bunch in bunches:
    bunch.stop()

sys.exit(status)
