from appservices.common.util import *

invalid_beneficiaries_list = Blueprint("invalid_beneficiaries_list",__name__)


def fetching_invalid_beneficiary_details(each_beneficiary):
    invalidbeneficiaryDict = {}
    try:
        invalidbeneficiaryDict = {
        "id":str(each_beneficiary.id),
        "userId":str(each_beneficiary.userId.id),
        "merchantName":each_beneficiary.userId.fullName,
        "accountNumber":each_beneficiary.accountNumber,
        "beneficiaryName":each_beneficiary.beneficiaryName,
        "ifscCode":each_beneficiary.ifscCode,
        "status":each_beneficiary.status,
        # "createdOn":each_beneficiary.createdOn.astimezone(ist_timezone).strftime("%d-%m-%Y %I:%M %p")
        }
        if each_beneficiary.createdOn:
            invalidbeneficiaryDict["createdOn"] = each_beneficiary.createdOn.strftime("%m-%d-%Y")
        else:
            invalidbeneficiaryDict["createdOn"] = ""


    except Exception as e:
        app.logger.error(traceback.format_exc())
    return invalidbeneficiaryDict

@invalid_beneficiaries_list.route("/invalid_beneficiaries", methods=["POST", "GET"])
@adminid_access_token_required
def invalid_beneficiaries():
    if not session.get("adminId"):
        return redirect("admin_login")
    
    adminId = session.get("adminId")
    invalidbeneficiaryList = []
    merchantsList = []
    pagination = None
    searchId = ""
    snoCount = 0
    servicePage = None

    permissionsList = check_permissions(adminId, "invalidBeneficiariesListPermissions")
    if "view" in permissionsList:
        try:
            searchId = request.args.get("searchId", "")
            merchantName = request.args.get("merchantName", "")
            merchantId = request.args.get("merchantId", "")
            benePage = request.args.get(get_page_parameter("benePage"), type=int, default=1)
            print(benePage, "((((((((((benePage))))))))))")

            per_page = 20
            start = (benePage - 1) * per_page
            filters = Q(status__in=[0, 1])

            # You can apply filtering here if needed (e.g., by merchantId or searchId)
            if searchId:
                filters &= Q(beneficiaryName__icontains=searchId)
            if merchantId:
                filters &= Q(userId=merchantId)

            total_count = InvalidBenificiaryLogs.objects(filters).count()

            invalid_beneficiaries_queryset = (
                InvalidBenificiaryLogs.objects(filters)
                .only("userId", "accountNumber", "beneficiaryName", "ifscCode", "createdOn")
                .order_by("-id")
                .skip(start)
                .limit(per_page)
            )

            invalidbeneficiaryList = list(invalid_beneficiaries_queryset)
            snoCount = start
            pagination = Pagination(benePage=benePage, total=total_count, per_page=per_page, page_parameter="benePage", alignment="right", record_name="invalidbeneficiary", href=f"?searchId={searchId}&benePage={{0}}")


            return render_template("super_admin_templates/invalid_beneficiary_list.html",
                pagination=pagination,
                invalidbeneficiaryList=invalidbeneficiaryList,
                merchantName=merchantName,
                merchantsList=merchantsList,
                snoCount=snoCount,
                servicePage=servicePage,
                searchId=searchId,
            )
        
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch all invalid beneficiaries data!!"
            return render_template("super_admin_templates/invalid_beneficiary_list.html",
                error=error,
                pagination=pagination,
                invalidbeneficiaryList=invalidbeneficiaryList,
                merchantName=merchantName,
                merchantsList=merchantsList,
                searchId=searchId,
                snoCount=snoCount,
                servicePage=servicePage,
            )
    else:
        flash("The staff member does not have permission to view Invalid Beneficiaries permissions.","danger")
        return redirect(url_for("admin.dashboard"))
        
