import yaml

from gridka_node_config.netdb import get_config, set_config
from gridka_node_config.util import build_api_session

from ipaddress import IPv4Address, IPv6Address

if __name__ == '__main__':
    with open('common.yaml') as f:
        config = yaml.safe_load(f)['bird::config']

    api_session = build_api_session()

    for rack, config in config.items():
        if rack == 'WN racks on old Hardware':
            continue
        print(rack, config)

        if type(config['ip remote']) is not list:
            config['ip remote'] = [config['ip remote']]

        if type(config['ip6 remote']) is not list:
            config['ip6 remote'] = [config['ip6 remote']]

        set_config(
            api_session=api_session,
            bcd=f'gridka-{rack}-p-1',
            local_as=config['as local'],
            remote_as=config['as remote'],
            ipv4_remote=[IPv4Address(ip) for ip in config['ip remote']],
            ipv6_remote=[IPv6Address(ip) for ip in config['ip6 remote']],
        )

        applied = get_config(api_session=api_session, bcd_list=[f'gridka-{rack}-p-1'])
        if len(applied.keys()) > 0:
            print(applied)
        else:
            print('!!!!!!!!!!!!!!!!!!!!')
            print(f'No config applied ({rack})!!!')
            print('!!!!!!!!!!!!!!!!!!!!')