"""**** Scripted by Antony Silvester ****** """
import json
from urllib import addbase
import os


import requests
from requests.auth import HTTPBasicAuth


class BgpLs:

    def __init__(self):
        self.localAs = 100
        self.maxSession = 20
        self.lsCapability = True
        self.holdTime = 180
        self.largeAsCapability = False
        self.flowSpecCapability = 'IPV4'
        self.flowSpecRpdCapability = False
        self.remoteAs = 100
        self.peerHoldTime = 120
        self.connectMode = 'active'
        self.bgpPeer = []
        self.routerId = ''
        self.peerIp = ''
        #self.org_bgp = []

    def ipValue(self,localip,remoteip):
        self.routerId = localip
        self.peerIp = remoteip
        return self.routerId , self.peerIp

    def DictoJson(self):
        Dicdata = {}
        org_bgp =[]
        org_bgp.append({'peerIp': self.peerIp , 'remoteAs':self.remoteAs,
                        'peerHoldTime':self.peerHoldTime , 'connectMode':self.connectMode })
        if self.routerId != '':
            Dicdata['routerId'] = self.routerId
        if self.localAs != '':
            Dicdata['localAs'] = self.localAs
        if self.maxSession != '':
            Dicdata['maxSession'] = self.maxSession
        if self.lsCapability != '':
            Dicdata['lsCapability'] = self.lsCapability
        if self.holdTime != '':
            Dicdata['holdTime'] = self.holdTime
        if self.largeAsCapability != '':
            Dicdata['largeAsCapability'] = self.largeAsCapability
        if self.flowSpecCapability != '':
            Dicdata['flowSpecCapability'] = self.flowSpecCapability
        if self.flowSpecRpdCapability != '':
            Dicdata['flowSpecRpdCapability'] = self.flowSpecRpdCapability
        if self.bgpPeer != '':
            Dicdata['bgpPeer'] = org_bgp

        Dicdata = {'bgpapp':Dicdata}
        Dicdata = {'org.onosproject.provider.bgp.cfg':Dicdata}
        Dicdata = {'apps':Dicdata}
        return json.dumps(Dicdata,indent=4)


    def  Comments(self):
        print("**********************************************************************************\n")

    def Constants(self):
        self.Ne_id_1 =  '1111.1111.0011'
        self.Ne_id_2 = '2222.2222.0022'
        self.Ne_id_3 = '3333.3333.0033'
        self.Ne_id_4 = '4444.4444.0044'
        listnum = [self.Ne_id_1,self.Ne_id_2,self.Ne_id_3,self.Ne_id_4,]
        var = [self.peerIp]
        return var,listnum

    def apps(self):
        self.app_bgp = 'org.onosproject.bgp'
        self.app_bgpflow = 'org.onosproject.bgpflow'
        self.list1 = [self.app_bgp,self.app_bgpflow]
        return self.list1

    def checkLinks(self,linksResp):
        #Declaring the links values
        links = {'link1_src' : "1650.5555.0055", 'link1_dst' : "1660.6666.0066",
             'link2_src' : "1630.3333.0033", 'link2_dst' : "1620.2222.0022",
             'link3_src' : "1660.6666.0066", 'link3_dst' : "1650.5555.0055",
             'link4_src' : "1630.3333.0033", 'link4_dst' : "1650.5555.0055",
             'link5_src' : "1640.4444.0044", 'link5_dst' : "1610.1111.0011",
             'link6_src' : "1650.5555.0055", 'link4_dst' : "1630.3333.0033",
             'link7_src' : "1620.2222.0022", 'link4_dst' : "1630.3333.0033",
             'link8_src' : "1620.2222.0022", 'link4_dst' : "1610.1111.0011",
             'link9_src' : "1630.3333.0033", 'link4_dst' : "1640.4444.0044",
             'link10_src' : "1650.5555.0055", 'link4_dst' : "1640.4444.0044",
             'link11_src' : "1610.1111.0011", 'link4_dst' : "1640.4444.0044",
             'link12_src' : "1640.4444.0044", 'link4_dst' : "1620.2222.0022",
             'link13_src' : "1660.6666.0066", 'link4_dst' : "1630.3333.0033",
             'link14_src' : "1640.4444.0044", 'link4_dst' : "1660.6666.0066",
             'link15_src' : "1640.4444.0044", 'link4_dst' : "1630.3333.0033",
             'link16_src' : "1610.1111.0011", 'link4_dst' : "1630.3333.0033",
             'link17_src' : "1630.3333.0033", 'link4_dst' : "1610.1111.0011",
             'link18_src' : "1610.1111.0011", 'link4_dst' : "1620.2222.0022",
             'link19_src' : "1620.2222.0022", 'link4_dst' : "1640.4444.0044",
             'link20_src' : "1630.3333.0033", 'link4_dst' : "1660.6666.0066",
             'link21_src' : "1640.4444.0044", 'link4_dst' : "1650.5555.0055",
             'link22_src' : "1660.6666.0066", 'link4_dst' : "1640.4444.0044"
        }

        #Comparing the Links
        for x in xrange(22):
            link_src_info = linksResp[x]['src']['device']
            link_dst_info = linksResp[x]['dst']['device']
            link_src_split = link_src_info.split("=")
            link_src = link_src_split[4]
            link_dst_split = link_dst_info.split("=")
            link_dst = link_dst_split[4]
            y = x+1
            link_src_ref = links['link'+str(y)+'_src']
            link_dst_ref = links['link'+str(y)+'_dst']
            if (link_src == link_src_ref) and (link_dst == (link_dst_ref) and \
                linksResp[x]['type'] == 'DIRECT' and linksResp[x]['state'] == \
                'ACTIVE'):
                return True
            else:
                return False
