assert node.has_bundle('java')

defaults = {
    'backup': {
        'paths': {
            '/var/lib/minecraft',
        },
    }
}

default_properties = {
    'broadcast-rcon-to-ops': True,
    'view-distance': 10,
    'enable-jmx-monitoring': False,
    'server-ip': None,
    'resource-pack-prompt': None,
    'rcon.port': 25251,
    'gamemode': 'survival',
    'server-port': 25250,
    'allow-nether': True,
    'enable-command-block': False,
    'enable-rcon': False,
    'sync-chunk-writes': True,
    'enable-query': False,
    'op-permission-level': 4,
    'prevent-proxy-connections': False,
    'resource-pack': None,
    'entity-broadcast-range-percentage': 100,
    'level-name': 'world',
    'rcon.password': None,
    'player-idle-timeout': 0,
    'motd': 'A Minecraft Server',
    'query.port': 25252,
    'force-gamemode': False,
    'rate-limit': 0,
    'hardcore': False,
    'white-list': False,
    'broadcast-console-to-ops': True,
    'pvp': True,
    'spawn-npcs': True,
    'spawn-animals': True,
    'snooper-enabled': True,
    'difficulty': 'easy',
    'function-permission-level': 2,
    'network-compression-threshold': 256,
    'text-filtering-config': None,
    'require-resource-pack': False,
    'spawn-monsters': True,
    'max-tick-time': 60000,
    'enforce-whitelist': False,
    'use-native-transport': True,
    'max-players': 20,
    'resource-pack-sha1': None,
    'spawn-protection': 0,
    'online-mode': True,
    'enable-status': True,
    'allow-flight': False,
    'max-world-size': 29999984,
}


@metadata_reactor.provides(
    'minecraft/servers',
)
def server_properties(metadata):
    servers = {}
    
    for name, options in metadata.get('minecraft/servers').items():
        servers[name] = {
            **default_properties,
        }

    return {
        'minecraft': {
            'servers': servers,
        },
    }


@metadata_reactor.provides(
    'systemd/units',
)
def server_unitfiles(metadata):
    units = {}
    
    for name in metadata.get('minecraft/servers'):
        units[f'minecraft-{name}.service'] = {
            'Unit': {
                'Description': f'minecraft server {name}',
                'After': 'network.target',
            },
            'Service': {
                'User': 'minecraft',
                'WorkingDirectory': f'/var/lib/minecraft/{name}',
                'ExecStart': '/usr/bin/java -Xms1024M -Xmx2560M -jar /opt/minecraft/server.jar nogui',
                'Restart': 'always',
            },
        }

    return {
        'systemd': {
            'units': units,
        },
    }