assert node.has_bundle('steam') and node.has_bundle('steam-workshop-download')

directories = {
    '/opt/steam/left4dead2-servers': {
        'owner': 'steam',
        'group': 'steam',
        'mode': '0755',
        'purge': True,
    },
    # Current zfs doesnt support zfs upperdir. The support was added in October 2022. Move upperdir - unused anyway -
    # to another dir. Also move workdir alongside it, as it has to be on same fs.
    '/opt/steam-zfs-overlay-workarounds': {
        'owner': 'steam',
        'group': 'steam',
        'mode': '0755',
        'purge': True,
    },
}

# /opt/steam/steam/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
symlinks = {
    '/opt/steam/steam/.steam/sdk32': {
        'target': '/opt/steam/steam/linux32',
        'owner': 'steam',
        'group': 'steam',
    }
}

#
# SERVERS
#

for name, config in node.metadata.get('left4dead2/servers').items():

    #overlay
    directories[f'/opt/steam/left4dead2-servers/{name}'] = {
        'owner': 'steam',
        'group': 'steam',
    }
    directories[f'/opt/steam-zfs-overlay-workarounds/{name}/upper'] = {
        'owner': 'steam',
        'group': 'steam',
    }
    directories[f'/opt/steam-zfs-overlay-workarounds/{name}/workdir'] = {
        'owner': 'steam',
        'group': 'steam',
    }

    # conf
    files[f'/opt/steam/left4dead2-servers/{name}/left4dead2/cfg/server.cfg'] = {
        'content_type': 'mako',
        'source': 'server.cfg',
        'context': {
            'name': name,
            'steamgroups': node.metadata.get('left4dead2/steamgroups'),
            'rcon_password': config['rcon_password'],
        },
        'owner': 'steam',
        'group': 'steam',
        'triggers': [
            f'svc_systemd:left4dead2-{name}.service:restart',
        ],
    }

    # service
    svc_systemd[f'left4dead2-{name}.service'] = {
        'needs': [
            f'file:/opt/steam/left4dead2-servers/{name}/left4dead2/cfg/server.cfg',
            f'file:/usr/local/lib/systemd/system/left4dead2-{name}.service',
        ],
    }

    #
    # ADDONS
    #

    # base
    files[f'/opt/steam/left4dead2-servers/{name}/left4dead2/addons/readme.txt'] = {
        'content_type': 'any',
        'owner': 'steam',
        'group': 'steam',
    }
    directories[f'/opt/steam/left4dead2-servers/{name}/left4dead2/addons'] = {
        'owner': 'steam',
        'group': 'steam',
        'purge': True,
        'triggers': [
            f'svc_systemd:left4dead2-{name}.service:restart',
        ],
    }
    for id in [
        *config.get('workshop', []),
        *node.metadata.get('left4dead2/workshop'),
    ]:
        files[f'/opt/steam/left4dead2-servers/{name}/left4dead2/addons/{id}.vpk'] = {
            'content_type': 'any',
            'owner': 'steam',
            'group': 'steam',
            'triggers': [
                f'svc_systemd:left4dead2-{name}.service:restart',
            ],
        }

    # admin system

    directories[f'/opt/steam/left4dead2-servers/{name}/left4dead2/ems/admin system'] = {
        'owner': 'steam',
        'group': 'steam',
        'mode': '0755',
        'triggers': [
            f'svc_systemd:left4dead2-{name}.service:restart',
        ],
    }
    files[f'/opt/steam/left4dead2-servers/{name}/left4dead2/ems/admin system/admins.txt'] = {
        'owner': 'steam',
        'group': 'steam',
        'mode': '0755',
        'content': '\n'.join(sorted(node.metadata.get('left4dead2/admins'))),
        'triggers': [
            f'svc_systemd:left4dead2-{name}.service:restart',
        ],
    }