repo.libs.tools.require_bundle(node, 'nodejs')
repo.libs.tools.require_bundle(node, 'postgresql')

directories = {
    '/opt/powerdnsadmin/src': {},
}

git_deploy = {
    '/opt/powerdnsadmin/src': {
        'repo': 'https://github.com/ngoduykhanh/PowerDNS-Admin.git',
        'rev': node.metadata['powerdnsadmin']['version'],
        'triggers': {
            'action:powerdnsadmin_install_deps',
            'action:powerdnsadmin_upgrade_database',
            'action:powerdnsadmin_compile_assets',
            'svc_systemd:powerdnsadmin:restart',
        },
    },
}

files = {
    '/opt/powerdnsadmin/config.py': {
        'content_type': 'mako',
        'triggers': {
            'svc_systemd:powerdnsadmin:restart',
        },
    },
    '/etc/systemd/system/powerdnsadmin.service': {
        'triggers': {
            'action:systemd-reload',
            'svc_systemd:powerdnsadmin:restart',
        },
    },
}

actions = {
    'powerdnsadmin_create_virtualenv': {
        'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/powerdnsadmin/venv/',
        'unless': 'test -d /opt/powerdnsadmin/venv/',
        'needs': {
            'directory:/opt/powerdnsadmin', # provided by bundle:users
        },
        'after': {
            'pkg_apt:',
        },
    },
    'powerdnsadmin_install_deps': {
        'triggered': True,
        'command': '/opt/powerdnsadmin/venv/bin/pip install --upgrade psycopg2-binary -r /opt/powerdnsadmin/src/requirements.txt',
        'needs': {
            'action:powerdnsadmin_create_virtualenv',
            'pkg_apt:',
        },
    },
    'powerdnsadmin_upgrade_database': {
        'triggered': True,
        'command': 'cd /opt/powerdnsadmin/src && FLASK_CONF=/opt/powerdnsadmin/config.py FLASK_APP=/opt/powerdnsadmin/src/powerdnsadmin/__init__.py /opt/powerdnsadmin/venv/bin/flask db upgrade',
        # TODO unless
        'needs': {
            'action:powerdnsadmin_install_deps',
            'bundle:postgresql',
            'pkg_apt:',
        },
    },
    'powerdnsadmin_compile_assets': {
        'triggered': True,
        'command': ' && '.join([
            'cd /opt/powerdnsadmin/src',
            'yarn install --pure-lockfile --ignore-scripts',
            'FLASK_APP=/opt/powerdnsadmin/src/powerdnsadmin/__init__.py /opt/powerdnsadmin/venv/bin/flask assets build',
            'chown -R powerdnsadmin:powerdnsadmin /opt/powerdnsadmin/src/powerdnsadmin/static/',
        ]),
        'needs': {
            'action:nodejs_install_yarn',
            'action:powerdnsadmin_install_deps',
            'pkg_apt:',
        },
    },
}

svc_systemd = {
    'powerdnsadmin': {
        'needs': {
            'file:/opt/powerdnsadmin/config.py',
            'file:/etc/systemd/system/powerdnsadmin.service',
            'git_deploy:/opt/powerdnsadmin/src',
            'action:powerdnsadmin_install_deps',
            'action:powerdnsadmin_upgrade_database',
            'action:powerdnsadmin_compile_assets',
        },
    },
}