from ..bf_gbl_env.var_env import *


def writeDupLabLocRules(
    self, op_type, ipver, vrf, sess, inlab, delete2
):
    if self.mcast == False:
        return
    if op_type == 1:
        act = "act_decap_mpls_ipv"+ipver
    else:
        act = "act_drop"
    if op_type != 3:
        self.mcast_nid.append(sess << 16)
        self.mcast_xid.append(0)
    tbl_global_path1 = "ig_ctl.ig_ctl_mpls"
    tbl_name1 = "%s.tbl_mpls_fib" % (tbl_global_path1)
    tbl_action_name1 = "%s.act_mpls_bcast_label" % (tbl_global_path1)
    key_field_list1 = [
        gc.KeyTuple("hdr.mpls0.label", inlab),
    ]
    data_field_list1 = [
         gc.DataTuple("sess", sess),
    ]
    key_annotation_fields1 = {}
    data_annotation_fields1 = {}
    if delete2 == "add":
        op_type2 = 1
    elif delete2 == "mod":
        op_type2 = 2
    else:
        op_type2 = 3
    self._processEntryFromControlPlane(
        op_type2,
        tbl_name1,
        key_field_list1,
        data_field_list1,
        tbl_action_name1,
        key_annotation_fields1,
        data_annotation_fields1,
    )

    tbl_global_path2 = "eg_ctl.eg_ctl_mcast"
    tbl_name2 = "%s.tbl_mcast" % (tbl_global_path2)
    tbl_action_name2 = "%s.%s" % (tbl_global_path2, act)
    key_field_list2 = [
        gc.KeyTuple("hdr.internal.clone_session", sess),
        gc.KeyTuple("eg_intr_md.egress_rid", 0),
    ]
    data_field_list2 = []
    key_annotation_fields2 = {}
    data_annotation_fields2 = {}
    self._processEntryFromControlPlane(
        op_type2,
        tbl_name2,
        key_field_list2,
        data_field_list2,
        tbl_action_name2,
        key_annotation_fields2,
        data_annotation_fields2,
    )

    self._processMcastNodeFromControlPlane(
        op_type,
        sess << 16,
        0,
        self.recirc_port,
    )

    self._processMcastMgidFromControlPlane(
        op_type2,
        sess,
        self.mcast_nid,
        self.mcast_xid,
    )
    self.mcast_nid = []
    self.mcast_xid = []

