#! /usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 Inuvika Inc.
# https://www.inuvika.com
# Author David Lechevalier <d.lechevalier@inuvika.com> 2021
# All rights reserved

import argparse
import glob
import logging
import os
import sys
import subprocess

valid_services = (
	'ovd-edc-ftbiometric.service',
	'ovd-edc-ftwebcam.service',
	'ovd-edc-ftusb.service',
	'ovd-edc-ftscanner.service',
	'ovd-edc-ftsound.service'
)

def premium_devices(action):
	logging.info("processing premium device action: {}".format(action))

	status = "OK"
	for service in [os.path.basename(p) for p in glob.glob("/usr/lib/systemd/system/ovd-edc-*.service")]:
		if service not in valid_services:
			logging.debug("service {} is not valid".format(service))
			continue

		logging.debug("Activating service {}".format(service))
		p = subprocess.Popen("systemctl {action} {service}".format(
			action = action,
			service = service,
		) , shell=True)

		p.wait()
		if p.returncode != 0:
			logging.warning("Unable to {action} the service {service}".format(
				action = action,
				service = service,
			))
			status = "ERROR"

	print(status, end="")


if __name__ == "__main__":
	parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
	parser.add_argument("--log-level", "-l", choices=["debug", "info", "warning", "error"], default="info", help="Log level to use")
	args = parser.parse_args()

	logging.basicConfig(level=args.log_level.upper(), stream=sys.stderr, format='[%(levelname)s]: %(message)s')
	logging.debug("EDC Worker started")

	request = None
	try:
		request = sys.stdin.readline().strip()
	except Exception as e:
		logging.error("Unable to get request: {}".format(exc))

	logging.debug("request: {}".format(request))

	if request == "premium-devices-start":
		premium_devices("start")

	if request == "premium-devices-stop":
		premium_devices("stop")
