from bundlewrap.metadata import atomic

defaults = {
    'apt': {
        'packages': {
            'transmission-daemon': {},
        },
    },
    'icinga2_api': {
        'transmission': {
            'services': {
                'TRANSMISSION PROCESS': {
                    'command_on_monitored_host': '/usr/lib/nagios/plugins/check_procs -a transmission-daemon -c 1:',
                },
            },
        },
    },
    'transmission': {
        'config': {
            'message-level': 2,
            'peer-port': 51413,
            'port-forwarding-enabled': False,
            'rename-partial-files': True,
            'rpc-authentication-required': False,
            'rpc-bind-address': '0.0.0.0',
            'rpc-enabled': True,
            'rpc-host-whitelist-enabled': False,
            'rpc-port': 9091,
            'rpc-url': '/transmission/',
            'rpc-whitelist-enabled': False,
            'start-added-torrents': True,
        },
    },
}

if node.has_bundle('telegraf'):
    defaults['telegraf'] = {
        'input_plugins': {
            'exec': {
                'transmission': {
                    'commands': ['telegraf-transmission-plugin'],
                    'interval': '10s',
                    'data_format': 'influx',
                    'timeout': '5s',
                },
            },
        },
    }


@metadata_reactor.provides(
    'firewall/port_rules',
)
def firewall(metadata):
    return {
        'firewall': {
            'port_rules': {
                f"{metadata.get('transmission/config/peer-port')}/tcp": atomic({'*'}),
                f"{metadata.get('transmission/config/peer-port')}/udp": atomic({'*'}),
                f"{metadata.get('transmission/config/rpc-port')}/tcp": atomic(metadata.get('transmission/restrict-to', {'*'})),
            },
        },
    }


@metadata_reactor.provides(
    'icinga2_api/transmission/services',
)
def icinga_web(metadata):
    port = metadata.get('transmission/config/rpc-port')
    path = metadata.get('transmission/config/rpc-url')

    return {
        'icinga2_api': {
            'transmission': {
                'services': {
                    'TRANSMISSION WEB INTERFACE': {
                        'command_on_monitored_host': f'/usr/local/share/icinga/plugins/check_http_url_for_string http://127.0.0.1:{port}{path} "Transmission"',
                    },
                },
            },
        },
    }