#!/usr/bin/env python3
import sys

import create_disk
import rollout
from helpers import run_cmds_from_args


def create():
    """
    Overwrite the image with a new one.
    """
    create_disk.make_image()
    create_disk.make_blockdev()
    create_disk.make_filesystems()


def mount(unpack=False):
    """
    Mount existing system
    """
    create_disk.make_blockdev()
    create_disk.mount_system()
    if unpack:
        create_disk.unpack_system()
    create_disk.mount_chroot()


def unmount(zerofree=False):
    """
    Ensure the system is clean
    """
    create_disk.unmount_chroot()
    create_disk.unmount_system(zerofree=zerofree)
    create_disk.destroy_blockdev()


def main():
    """
    Main routine.
    """
    unmount()
    create()
    unmount()

    mount(unpack=True)
    # Changes in system
    create_disk.fixup_postgresql()
    create_disk.update_migration_tools()
    create_disk.unpack_source_data()
    create_disk.unpack_source_db()
    create_disk.clone_custom_files()
    rollout.passwords()
    rollout.reset_git_repos()
    rollout.configs()
    rollout.ssh_keys()
    rollout.services()
    rollout.packages_purge()
    rollout.postfix_postmap()
    rollout.ssl_cert()
    create_disk.install_grub()
    unmount(zerofree=True)
    create_disk.convert_disk()


if __name__ == '__main__':
    if sys.version_info < (3, 7):
        print("At least python3.7 required.")
        sys.exit(1)

    cmds = globals().copy()
    for module in [create_disk, rollout]:
        cmds.update({fnc: getattr(module, fnc) for fnc in dir(module)})
    run_cmds_from_args(avail=cmds, default='main')
