from appservices.common.util import *

merchant_affiliates = Blueprint("merchant_affiliates",__name__)

############### Merchant Affiliates ################

@merchant_affiliates.route("/add_affiliate",methods=["POST","GET"])
@adminid_access_token_required
def add_affiliate():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        permissionsList = check_permissions(adminId,"affiliatesPermissions")
        if "add" in permissionsList:
            if request.method == "POST":
                name = request.form.get("name","")
                phoneNumber = request.form.get("phoneNumber","")
                email = request.form.get("email","")
                password = request.form.get("password","")

                if name and phoneNumber and email and password:
                    try:
                        affiliates_table = Affiliates(
                            adminId=adminId,
                            name = name,
                            email = email,
                            phoneNumber = phoneNumber,
                            password = generate_password_hash(password),
                            createdOn = datetime.datetime.now(),
                            status = 1,
                            )
                        save_table = affiliates_table.save()

                        flash("Affiliate saved successfully!")
                        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
                    except Exception as e:
                        flash("Unable to save affiliate details!!")
                        app.logger.error(traceback.format_exc())
                        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
        else:
            flash("Staff member does not have given create affiliate permissions!!")
            return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save affiliate details!!"
        return render_template("super_admin_templates/merchant_affiliates_list.html",error=error,redirectTo="Affiliate")


@merchant_affiliates.route("/update_affiliate",methods=["POST","GET"])
@adminid_access_token_required
def update_affiliate():
    if not session.get("adminId"):
        return redirect("admin_login")

    permissionsList = check_permissions(session.get("adminId"),"affiliatesPermissions")
    if "edit" in permissionsList:
        try:
            affiliateId = request.args.get("affiliateId","")
            if request.method == "POST":
                name = request.form.get("name","")
                phoneNumber = request.form.get("phoneNumber","")
                email = request.form.get("email","")

                if name and phoneNumber and email:
                    affiliate_queryset = Affiliates.objects(id=affiliateId,status__in=[0,1]).first()
                    if affiliate_queryset:
                        affiliate_queryset.update(
                            name = name,
                            email = email,
                            phoneNumber = phoneNumber
                            )
                        flash("Affiliate updated successfully!")
                        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
                    else:
                        flash("Invaild id!!")
                        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to update affiliate details!!"
            flash(error)
            return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
    else:
        flash("Staff member does not have given update affiliate permissions!!")
        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))

def fetching_affiliate_details(affiliate_queryset):
    affiliate_dict = {}
    try:
        affiliate_dict={
        "id":str(affiliate_queryset.id),
        "phoneNumber":affiliate_queryset.phoneNumber,
        "name":affiliate_queryset.name,
        "email":affiliate_queryset.email
        }
        if affiliate_queryset.status==1:
            affiliate_dict["actionText"] = "Active"
        else:
            affiliate_dict["actionText"] = "Deactive"

        if affiliate_queryset.createdOn:
            affiliate_dict["createdOn"] = affiliate_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            affiliate_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return affiliate_dict

@merchant_affiliates.route("/get_merchant_affiliates_list",methods=["POST","GET"])
@adminid_access_token_required
def get_merchant_affiliates_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    affiliatesList = []
    
    adminId = session.get("adminId")
    permissionsList = check_permissions(session.get("adminId"),"affiliatesPermissions")
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo","Affiliate")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = "Affiliate"
            search_element = request.form.get("search_element","")

            page = request.args.get(get_page_parameter(), type=int, default=1)
            page_start,page_end=fetch_limit_length_based_on_page_index(page,10)

            affiliates_queryset = Affiliates.objects(status__in=[0,1]).order_by("-id")
            if search_element:
                affiliates_queryset = affiliates_queryset.filter(Q(name__icontains=search_element))
            length = affiliates_queryset.count()
            affiliates_queryset=affiliates_queryset[page_start:page_end]

            for each_affiliate in affiliates_queryset:
                affiliate_dict = fetching_affiliate_details(each_affiliate)
                affiliatesList.append(affiliate_dict)

            
            pagination = Pagination(
                page=page,
                total=length,
                record_name='merchant_affiliates',
                per_page=10,
                alignment="right"
                )
            return render_template("super_admin_templates/merchant_affiliates_list.html",
                affiliatesList=affiliatesList,
                redirectval=redirectval,
                pagination=pagination,
                search_element=search_element
                )
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch affiliates details!!"
            return render_template("super_admin_templates/merchant_affiliates_list.html", 
                error=error,
                affiliatesList=affiliatesList,
                pagination=pagination,
                search_element=search_element
                )
    else:
        flash("Staff member does not have given view affiliate permissions!!")
        return render_template("super_admin_templates/merchant_affiliates_list.html")

@merchant_affiliates.route("/update_affiliate_status",methods=["POST","GET"])
@adminid_access_token_required
def update_affiliate_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    permissionsList = check_permissions(session.get("adminId"),"affiliatesPermissions")
    if "edit" in permissionsList:
        affiliateId = request.args.get("affiliateId","")

        if affiliateId:
            try:
                affiliate_queryset = Affiliates.objects(id=affiliateId,status__in=[0,1]).first()
                if affiliate_queryset:
                    if affiliate_queryset.status == 0:
                        affiliate_queryset.update(status=1)
                        flash("Affiliate activated successfully!")
                    elif affiliate_queryset.status == 1:
                        affiliate_queryset.update(status=0)
                        flash("Affiliate deactivated successfully!")
                    return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
        else:
            flash("Required field is missing!!")
            return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))
    else:
        flash("Staff member does not have given edit affiliate permissions!!")
        return redirect(url_for("merchant_affiliates.get_merchant_affiliates_list",redirectTo="Affiliate"))

############### Sub Admin ################

@merchant_affiliates.route("/add_sub_admin",methods=["POST","GET"])
@adminid_access_token_required
def add_sub_admin():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        if request.method == "POST":
            name = request.form.get("name","")
            phoneNumber = request.form.get("phoneNumber","")
            email = request.form.get("email","")
            password = request.form.get("password","")

            if name and phoneNumber and email and password:
                try:
                    sub_admins_table = SubAdmins(
                        adminId=adminId,
                        name = name,
                        email = email,
                        phoneNumber = phoneNumber,
                        password = generate_password_hash(password),
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = sub_admins_table.save()

                    flash("Subadmin saved successfully!")
                    return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
                except Exception as e:
                    flash("Unable to save sub admin details!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save sub admin details!!"
        return render_template("super_admin_templates/merchant_sub_admins_list.html",error=error,redirectTo="Subadmin")


@merchant_affiliates.route("/update_sub_admin",methods=["POST","GET"])
@adminid_access_token_required
def update_sub_admin():
    if not session.get("adminId"):
        return redirect("admin_login")
    try:
        subAdminId = request.args.get("subAdminId","")
        if request.method == "POST":
            name = request.form.get("name","")
            phoneNumber = request.form.get("phoneNumber","")
            email = request.form.get("email","")

            if name and phoneNumber and email:
                sub_admin_queryset = SubAdmins.objects(id=subAdminId,status__in=[0,1]).first()
                if sub_admin_queryset:
                    sub_admin_queryset.update(
                        name = name,
                        email = email,
                        phoneNumber = phoneNumber
                        )
                    flash("Subadmin updated successfully!")
                    return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update sub admin details!!"
        flash(error)
        return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))

def fetching_sub_admin_details(sub_admin_queryset):
    sub_admin_dict = {}
    try:
        sub_admin_dict={
        "id":str(sub_admin_queryset.id),
        "phoneNumber":sub_admin_queryset.phoneNumber,
        "name":sub_admin_queryset.name,
        "email":sub_admin_queryset.email
        }
        if sub_admin_queryset.status==1:
            sub_admin_dict["actionText"] = "Active"
        else:
            sub_admin_dict["actionText"] = "Deactive"

        if sub_admin_queryset.createdOn:
            sub_admin_dict["createdOn"] = sub_admin_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            sub_admin_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return sub_admin_dict

@merchant_affiliates.route("/get_merchant_sub_admins_list",methods=["POST","GET"])
@adminid_access_token_required
def get_merchant_sub_admins_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    subAdminsList = []
    
    adminId = session.get("adminId")
    try:
        redirectTo = request.args.get("redirectTo","Subadmin")
        if redirectTo:
            redirectval = redirectTo
        else:
            redirectval = "Subadmin"
        search_element = request.form.get("search_element","")

        page = request.args.get(get_page_parameter(), type=int, default=1)
        page_start,page_end=fetch_limit_length_based_on_page_index(page,10)

        sub_admins_queryset = SubAdmins.objects(status__in=[0,1]).order_by("-id")
        if search_element:
            sub_admins_queryset = sub_admins_queryset.filter(Q(name__icontains=search_element))
        length = sub_admins_queryset.count()
        sub_admins_queryset=sub_admins_queryset[page_start:page_end]

        for each_sub_admin in sub_admins_queryset:
            sub_admin_dict = fetching_sub_admin_details(each_sub_admin)
            subAdminsList.append(sub_admin_dict)

        
        pagination = Pagination(
            page=page,
            total=length,
            record_name='merchant_affiliates',
            per_page=10,
            alignment="right"
            )
        return render_template("super_admin_templates/merchant_sub_admins_list.html",
            subAdminsList=subAdminsList,
            redirectval=redirectval,
            pagination=pagination,
            search_element=search_element
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch sub_admins details!!"
        return render_template("super_admin_templates/merchant_sub_admins_list.html", 
            error=error,
            subAdminsList=subAdminsList,
            pagination=pagination,
            search_element=search_element
            )

@merchant_affiliates.route("/update_sub_admin_status",methods=["POST","GET"])
@adminid_access_token_required
def update_sub_admin_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    subAdminId = request.args.get("subAdminId","")

    if subAdminId:
        try:
            sub_admin_queryset = SubAdmins.objects(id=subAdminId,status__in=[0,1]).first()
            if sub_admin_queryset:
                if sub_admin_queryset.status == 0:
                    sub_admin_queryset.update(status=1)
                    flash("Subadmin activated successfully!")
                elif sub_admin_queryset.status == 1:
                    sub_admin_queryset.update(status=0)
                    flash("Subadmin deactivated successfully!")
                return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))
    else:
        flash("Required field is missing!!")
        return redirect(url_for("merchant_affiliates.get_merchant_sub_admins_list",redirectTo="Subadmin"))

############### Sub Admin Rights ################

@merchant_affiliates.route("/add_sub_admin_rights",methods=["POST","GET"])
@adminid_access_token_required
def add_sub_admin_rights():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        if request.method == "POST":
            name = request.form.get("name","")
            pageURL = request.form.get("pageURL","")

            if name and pageURL:
                try:
                    sub_admin_rights_table = SubAdminRights(
                        adminId=adminId,
                        name = name,
                        pageURL = pageURL,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = sub_admin_rights_table.save()

                    flash("Sub admin rights saved successfully!")
                    return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
                except Exception as e:
                    flash("Unable to save sub admin right details!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save sub admin right details!!"
        return render_template("super_admin_templates/sub_admin_rights_configuarations_list.html",error=error,redirectTo="Subadminright")


@merchant_affiliates.route("/update_sub_admin_right",methods=["POST","GET"])
@adminid_access_token_required
def update_sub_admin_right():
    if not session.get("adminId"):
        return redirect("admin_login")
    try:
        subAdminRightId = request.args.get("subAdminRightId","")
        if request.method == "POST":
            name = request.form.get("name","")
            pageURL = request.form.get("pageURL","")

            if name and pageURL:
                sub_admin_right_queryset = SubAdminRights.objects(id=subAdminRightId,status__in=[0,1]).first()
                if sub_admin_right_queryset:
                    sub_admin_right_queryset.update(
                        name = name,
                        pageURL = pageURL
                        )
                    flash("Sub admin rights updated successfully!")
                    return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update sub admin right details!!"
        flash(error)
        return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))

def fetching_sub_admin_right_details(sub_admin_right_queryset):
    sub_admin_right_dict = {}
    try:
        sub_admin_right_dict={
        "id":str(sub_admin_right_queryset.id),
        "pageURL":sub_admin_right_queryset.pageURL,
        "name":sub_admin_right_queryset.name
        }
        if sub_admin_right_queryset.status==1:
            sub_admin_right_dict["actionText"] = "Active"
        else:
            sub_admin_right_dict["actionText"] = "Deactive"

        if sub_admin_right_queryset.createdOn:
            sub_admin_right_dict["createdOn"] = sub_admin_right_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            sub_admin_right_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return sub_admin_right_dict

@merchant_affiliates.route("/get_sub_admin_rights_list",methods=["POST","GET"])
@adminid_access_token_required
def get_sub_admin_rights_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    sub_admin_rights_list = []
    
    adminId = session.get("adminId")
    try:
        redirectTo = request.args.get("redirectTo","Subadminright")
        if redirectTo:
            redirectval = redirectTo
        else:
            redirectval = "Subadminright"
        search_element = request.form.get("search_element","")

        page = request.args.get(get_page_parameter(), type=int, default=1)
        page_start,page_end=fetch_limit_length_based_on_page_index(page,10)

        sub_admin_rights_queryset = SubAdminRights.objects(status__in=[0,1]).order_by("-id")
        if search_element:
            sub_admin_rights_queryset = sub_admin_rights_queryset.filter(Q(name__icontains=search_element))
        length = sub_admin_rights_queryset.count()
        sub_admin_rights_queryset=sub_admin_rights_queryset[page_start:page_end]

        for each_sub_admin_right in sub_admin_rights_queryset:
            sub_admin_right_dict = fetching_sub_admin_right_details(each_sub_admin_right)
            sub_admin_rights_list.append(sub_admin_right_dict)

        
        pagination = Pagination(
            page=page,
            total=length,
            record_name='Subadminrights',
            per_page=10,
            alignment="right"
            )
        return render_template("super_admin_templates/sub_admin_rights_list.html",
            sub_admin_rights_list=sub_admin_rights_list,
            redirectval=redirectval,
            pagination=pagination,
            search_element=search_element
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch sub_admin_rights details!!"
        return render_template("super_admin_templates/sub_admin_rights_list.html", 
            error=error,
            sub_admin_rights_list=sub_admin_rights_list,
            pagination=pagination,
            search_element=search_element
            )

@merchant_affiliates.route("/update_sub_admin_right_status",methods=["POST","GET"])
@adminid_access_token_required
def update_sub_admin_right_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    subAdminRightId = request.args.get("subAdminRightId","")

    if subAdminRightId:
        try:
            sub_admin_right_queryset = SubAdminRights.objects(id=subAdminRightId,status__in=[0,1]).first()
            if sub_admin_right_queryset:
                if sub_admin_right_queryset.status == 0:
                    sub_admin_right_queryset.update(status=1)
                    flash("Sub admin rights activated successfully!")
                elif sub_admin_right_queryset.status == 1:
                    sub_admin_right_queryset.update(status=0)
                    flash("Sub admin rights deactivated successfully!")
                return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))
    else:
        flash("Required field is missing!!")
        return redirect(url_for("merchant_affiliates.get_sub_admin_rights_list",redirectTo="Subadminright"))

############### Master Disputes ################

@merchant_affiliates.route("/add_master_dispute",methods=["POST","GET"])
@adminid_access_token_required
def add_master_dispute():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        permissionsList = check_permissions(adminId,"masterDisputesPermissions")
        if "add" in permissionsList:
            if request.method == "POST":
                name = request.form.get("name","")

                if name:
                    try:
                        master_disputes_table = MasterDisputes(
                            adminId=adminId,
                            name = name,
                            createdOn = datetime.datetime.now(),
                            status = 1,
                            )
                        save_table = master_disputes_table.save()

                        flash("Master dispute saved successfully!")
                        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
                    except Exception as e:
                        flash("Unable to save master dispute right details!!")
                        app.logger.error(traceback.format_exc())
                        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
        else:
            flash("Staff member does not have given create master disputes permissions!!")
            return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save master dispute right details!!"
        return render_template("super_admin_templates/master_disputes_list.html",error=error,redirectTo="Masterdispute")


@merchant_affiliates.route("/update_master_dispute",methods=["POST","GET"])
@adminid_access_token_required
def update_master_dispute():
    if not session.get("adminId"):
        return redirect("admin_login")
    permissionsList = check_permissions(session.get("adminId"),"masterDisputesPermissions")
    if "edit" in permissionsList:
        try:
            masterDisputeId = request.args.get("masterDisputeId","")
            if request.method == "POST":
                name = request.form.get("name","")

                if name:
                    master_dispute_queryset = MasterDisputes.objects(id=masterDisputeId,status__in=[0,1]).first()
                    if master_dispute_queryset:
                        master_dispute_queryset.update(
                            name = name
                            )
                        flash("Master dispute updated successfully!")
                        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
                    else:
                        flash("Invaild id!!")
                        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to update master dispute right details!!"
            flash(error)
            return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
    else:
        flash("Staff member does not have given edit master disputes permissions!!")
        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))

def fetching_master_dispute_details(master_dispute_queryset):
    master_dispute_dict = {}
    try:
        master_dispute_dict={
        "id":str(master_dispute_queryset.id),
        "name":master_dispute_queryset.name
        }
        if master_dispute_queryset.status==1:
            master_dispute_dict["actionText"] = "Active"
        else:
            master_dispute_dict["actionText"] = "Deactive"

        if master_dispute_queryset.createdOn:
            master_dispute_dict["createdOn"] = master_dispute_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            master_dispute_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return master_dispute_dict

@merchant_affiliates.route("/get_master_disputes_list",methods=["POST","GET"])
@adminid_access_token_required
def get_master_disputes_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    permissionsList = check_permissions(session.get("adminId"),"masterDisputesPermissions")
    if "view" in permissionsList:
        master_disputes_list = []
        
        adminId = session.get("adminId")
        try:
            redirectTo = request.args.get("redirectTo","Masterdispute")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = "Masterdispute"
            search_element = request.form.get("search_element","")

            page = request.args.get(get_page_parameter(), type=int, default=1)
            page_start,page_end=fetch_limit_length_based_on_page_index(page,10)

            master_disputes_queryset = MasterDisputes.objects(status__in=[0,1]).order_by("-id")
            if search_element:
                master_disputes_queryset = master_disputes_queryset.filter(Q(name__icontains=search_element))
            length = master_disputes_queryset.count()
            master_disputes_queryset=master_disputes_queryset[page_start:page_end]

            for each_master_dispute in master_disputes_queryset:
                master_dispute_dict = fetching_master_dispute_details(each_master_dispute)
                master_disputes_list.append(master_dispute_dict)

            
            pagination = Pagination(
                page=page,
                total=length,
                record_name='Masterdisputes',
                per_page=10,
                alignment="right"
                )
            return render_template("super_admin_templates/master_disputes_list.html",
                master_disputes_list=master_disputes_list,
                redirectval=redirectval,
                pagination=pagination,
                search_element=search_element
                )
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch master_disputes details!!"
            return render_template("super_admin_templates/master_disputes_list.html", 
                error=error,
                master_disputes_list=master_disputes_list,
                pagination=pagination,
                search_element=search_element
                )
    else:
        flash("Staff member does not have given view master disputes permissions!!")
        return render_template("super_admin_templates/master_disputes_list.html")

@merchant_affiliates.route("/update_master_dispute_status",methods=["POST","GET"])
@adminid_access_token_required
def update_master_dispute_status():
    if not session.get("adminId"):
        return redirect("admin_login")

    permissionsList = check_permissions(session.get("adminId"),"masterDisputesPermissions")
    if "edit" in permissionsList:
        masterDisputeId = request.args.get("masterDisputeId","")

        if masterDisputeId:
            try:
                master_dispute_queryset = MasterDisputes.objects(id=masterDisputeId,status__in=[0,1]).first()
                if master_dispute_queryset:
                    if master_dispute_queryset.status == 0:
                        master_dispute_queryset.update(status=1)
                        flash("Master dispute activated successfully!")
                    elif master_dispute_queryset.status == 1:
                        master_dispute_queryset.update(status=0)
                        flash("Master dispute deactivated successfully!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
        else:
            flash("Required field is missing!!")
            return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))
    else:
        flash("Staff member does not have given edit master disputes permissions!!")
        return redirect(url_for("merchant_affiliates.get_master_disputes_list",redirectTo="Masterdispute"))

@merchant_affiliates.route("/delete_dispute",methods=["GET"])
@adminid_access_token_required
def delete_dispute():
    if not session.get("adminId"):
        return redirect("admin_login")
    permissionsList = check_permissions(session.get("adminId"),"masterDisputesPermissions")
    if "delete" in permissionsList:
        try:
            if request.method == "GET":
                masterDisputeId = request.args.get("masterDisputeId","")
                master_dispute_queryset = MasterDisputes.objects(id=masterDisputeId,status__in=[0,1]).first()
                if master_dispute_queryset:
                    master_dispute_queryset.update(status=2)
                    flash("Master dispute deleted successfully!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("merchant_affiliates.get_master_disputes_list"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            flash("Unable to delete master dispute type!!")
            return redirect(url_for("merchant_affiliates.get_master_disputes_list"))
    else:
        flash("Staff member does not have given delete master disputes permissions!!")
        return redirect(url_for("merchant_affiliates.get_master_disputes_list"))
