#!/usr/bin/python3

import argparse
import logging
import subprocess
import os
import sys

parser = argparse.ArgumentParser(
    prog="eltdev-update",
    description="Update ELT DevEnv packages to the latest version"
)


parser.add_argument(
    '-v',
    help="Verbose mode",
    action="store_const",
    dest="loglevel",
    const=logging.DEBUG,
    default=logging.INFO
)

args = parser.parse_args()
logger = logging.getLogger(parser.prog)
logging.basicConfig(level=args.loglevel)

if os.geteuid():
    logging.error("The program requires root permission")
    sys.exit(1)

if args.loglevel == logging.DEBUG:
    try:
        logger.debug("List available updates")
        subprocess.run(["dnf", "check-update", "--changelogs"], check=True)
    except subprocess.CalledProcessError as e:
        if e.returncode != 100:
            logger.error("Update listing failed")
            logger.debug(e , exc_info=True)
            sys.exit(1)

try:
    logger.info("Update elt-devenv-ansible RPM to the latest version")
    subprocess.run(["dnf", "-y", "--refresh", "update", "elt-devenv-ansible"], check=True)
except subprocess.CalledProcessError as e:
    logger.error("Update of elt-devenv-ansible RPM failed")
    logger.debug(e , exc_info=True)
    sys.exit(1)

try:
    logger.info("Run ansible-force-align")
    # TODO move ansible-force-align to PATH
    subprocess.run(["/root/elt/ansible-force-align"], check=True)
except subprocess.CalledProcessError as e:
    logger.error("The ansible-force-align script failed")
    logger.debug(e , exc_info=True)
    sys.exit(1)

logger.info("Update successful")
sys.exit(0)
