from bundlewrap.metadata import atomic

defaults = {
    'apt': {
        'packages': {
            'samba': {},
            'samba-vfs-modules': {},
        }
    }
}


@metadata_reactor.provides(
    'firewall/port_rules',
)
def firewall(metadata):
    return {
        'firewall': {
            'port_rules': {
                '137/udp': atomic(metadata.get('samba/restrict-to', set())),
                '138/udp': atomic(metadata.get('samba/restrict-to', set())),
                '139/tcp': atomic(metadata.get('samba/restrict-to', set())),
                '445/tcp': atomic(metadata.get('samba/restrict-to', set())),
            },
        },
    }


@metadata_reactor.provides(
    'zfs/datasets',
)
def timemachine_zfs(metadata):
    shares = metadata.get('samba/timemachine-shares', set())

    if not shares:
        return {}

    assert node.has_bundle('zfs'), f'{node.name}: time machine backups require zfs'

    datasets = {
        'tank/timemachine': {},
    }

    for share_name in shares:
        datasets[f'tank/timemachine/{share_name}'] = {
            'mountpoint': f'/srv/timemachine/{share_name}',
        }

    return {
        'zfs': {
            'datasets': datasets,
        },
    }