import json
import logging
import re

from inventory_provider.tasks.common import get_next_redis

logger = logging.getLogger(__name__)


def derive_router_hostnames(config):
    r = get_next_redis(config)

    routers = r.get('netdash')
    assert routers
    netdash_equipment = json.loads(routers.decode('utf-8'))
    assert isinstance(netdash_equipment, (list, tuple))
    netdash_equipment = set(netdash_equipment)

    opsdb_equipment = set()
    for k in r.scan_iter('opsdb:interface_services:*'):
        m = re.match(
            'opsdb:interface_services:([^:]+):.*$',
            k.decode('utf-8'))
        if m:
            opsdb_equipment.add(m.group(1))
        else:
            logger.info("Unable to derive router name from %s" %
                        k.decode('utf-8'))
    return netdash_equipment & opsdb_equipment