from appservices.common.util import *

business_documents = Blueprint("business_documents",__name__)


@business_documents.route("/add_business_documents",methods=["POST","GET"])
def add_business_documents():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"): 
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()
        permissionsList = check_permissions(adminId,"businessDocumentsPermissions")
        if "add" in permissionsList:
            if request.method == "POST":
                name = request.form.get("name","")
                isRequired = request.form.get("isRequired", "off")

                jsonData = request.form.to_dict(flat=True)
                requestData = [jsonData]
                updatedrequestData = [jsonData]  
                
                isRequired = True if isRequired == "True" else False
                
                if name :
                    try:
                        admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                        if admin_queryset:
                            message=admin_queryset.userName+" "+name+" Business Document created successfully!"
                            save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_business_documents","create",actionDate,client_ip,browser,message,requestData,updatedrequestData) 
                        business_documents_table = BusinessDocuments(
                            adminId=adminId,
                            name = name,
                            status = 1,
                            createdOn = datetime.datetime.now(),
                            isRequired=isRequired,
                            )
                        save_table = business_documents_table.save()
                        businessDocumentId = str(save_table.id)
                        

                        flash("Business Document saved successfully!")
                        return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
                    except Exception as e:
                        flash("Unable to save Business type!!")
                        app.logger.error(traceback.format_exc())
                        return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
        else:
            flash("Staff member does not have given create business document permissions!!")
            return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save Business Document!!"
        return render_template("super_admin_templates/business_documents_list.html",error=error)




@business_documents.route("/update_business_document", methods=["POST", "GET"])
def update_business_document():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId") 

    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    existing_record = ""
    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"): 
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()
    businessDocumentId = request.args.get("businessDocumentId","")
    
    try:
        permissionsList = check_permissions(session.get("adminId"),"businessDocumentsPermissions")
        if "edit" in permissionsList:               
            businessDocumentId = request.args.get("businessDocumentId","")
            if request.method == "POST":
                name = request.form.get("name", "")
                isRequired = request.form.get("isRequired", "off")
                jsonData = request.form.to_dict(flat=True) 
                remark = request.form.get("remark","") 
                
                
                isRequired = True if isRequired == "True" else False

                if name:
                    business_document_queryset = BusinessDocuments.objects(id=businessDocumentId, status__in=[0, 1]).first()
                    existing_record = business_document_queryset.to_json()
                    message=business_document_queryset.adminId.userName+" "+name+" Business Document updated successfully!"
                    requestData=[business_document_queryset]
                    updatedrequestData=[jsonData]
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_business_document","update",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    save_remarks_data=save_admin_remarks_data(businessDocumentId,adminId,remark,"businessDocuments") 

                    if business_document_queryset:
                        business_document_queryset.update(name=name,isRequired=isRequired)
                        flash("Business Document updated successfully!")
                        return redirect(url_for("business_documents.business_documents_list"))
                    else:
                        flash("Invalid ID!")
                        return redirect(url_for("business_documents.business_documents_list"))
                else:
                    flash("Required fields are missing!")
                    return redirect(url_for("business_documents.business_documents_list"))                       
            return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
        else:
            flash("Staff member does not have given update business documents permissions!!")
            return redirect(url_for("bank_masters.get_bank_masters_list",redirectTo="masterIfscBank"))

    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to update Business Document details!")
        return redirect(url_for("business_documents.business_documents_list"))

        
# @business_documents.route("/business_documents_list", methods=["GET"])
# def business_documents_list():
#     try:
#         if not session.get("adminId"):
#             return redirect("admin_login")
        
#         documents = BusinessDocuments.objects(status=1) 
#         return render_template("super_admin_templates/business_documents_list.html", documents=documents)
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to retrieve Business Documents!"
#         return render_template("super_admin_templates/business_documents_list.html", error=error)




@business_documents.route("/business_documents_list",methods=["POST","GET"])
def business_documents_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    businessDocumentsList = []
    pagination = None
    
    adminId = session.get("adminId")
    permissionsList = check_permissions(session.get("adminId"),"businessDocumentsPermissions")
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo","BusinessDocument")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = "BusinessDocument"
            search_element = request.form.get("search_element","")


            business_documents_queryset = BusinessDocuments.objects(status__in=[0,1]).order_by("-id")
            if search_element:
                business_documents_queryset = business_documents_queryset.filter(Q(name__icontains=search_element))


            # Get the current page from the query parameters
            page = request.args.get(get_page_parameter(), type=int, default=1)

            per_page = 20  # Number of items per page

            # Query the database for the current page's data
            total_count = business_documents_queryset.count()

            start = (page - 1) * per_page

            end = min(start + per_page, total_count)

            total_business_documents = business_documents_queryset[start:end]
            
            snoCount = start
            for each_business_documents in total_business_documents:
                snoCount +=1
                business_document_dict = fetching_business_document_details(each_business_documents)
                business_document_dict["snoCount"]=snoCount
                businessDocumentsList.append(business_document_dict)

            # Pagination object for rendering pagination controls in the template
            pagination = Pagination(page=page, total=total_count, per_page=per_page, alignment="right", record_name="business")

            return render_template("super_admin_templates/business_documents_list.html",
                pagination=pagination,
                businessDocumentsList=businessDocumentsList,
                redirectval=redirectval,
                search_element=search_element
                )
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch business document details!!"
            return render_template("super_admin_templates/business_documents_list.html", 
                error=error,
                pagination=pagination,
                businessDocumentsList=businessDocumentsList,
                search_element=search_element
                )
    else:
        flash("Staff member does not have given view business documents permissions!!")
        return redirect(url_for("admin.dashboard"))
    #     # return render_template("super_admin_templates/bank_masters_list.html")


# @business_documents.route("/delete_business_document", methods=["POST"])
# def delete_business_document(businessDocumentId):
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     businessDocumentId = request.args.get("businessDocumentId","")
    
#     try:
#         business_document_queryset = BusinessDocuments.objects(id=businessDocumentId).first()
#         if business_document_queryset:
#             business_document_queryset.update(set__status=0)  # Soft delete by updating status
#             flash("Business Document deleted successfully!")
#         else:
#             flash("Invalid ID!")
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         flash("Unable to delete Business Document!")
#     return redirect(url_for("business_documents.business_documents_list"))

@business_documents.route("/delete_business_document",methods=["GET"])
def delete_business_document():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"): 
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()

        jsonData = request.form.to_dict(flat=True)

        existing_record = ""
        updatedrequestData = [jsonData]
        remark = request.form.get("remark","")
        permissionsList = check_permissions(session.get("adminId"),"businessDocumentsPermissions")
        if "delete" in permissionsList:
            if request.method == "GET":
                businessDocumentId = request.args.get("businessDocumentId","")
                business_document_queryset = BusinessDocuments.objects(id=businessDocumentId,status__in=[0,1]).first()
                existing_record = business_document_queryset.to_json()
                requestData = [existing_record]
                business_document_queryset.update(status=2)
                flash("Business Document deleted successfully!")
                message=business_document_queryset.adminId.userName+" "+business_document_queryset.name+" User deleted successfully!"
                save_remarks_data=save_admin_remarks_data(businessDocumentId,adminId,remark,"businessDocuments")
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_business_document","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
        else:
            flash("Staff member does not have given delete business documents permissions!!")
            return redirect(url_for("business_documents.business_documents_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Business Document!!")
        return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))




@business_documents.route("/update_business_document_status",methods=["POST","GET"])
def update_business_document_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"): 
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    jsonData = request.form.to_dict(flat=True)

    existing_record = ""
    updatedrequestData = [jsonData]
    permissionsList = check_permissions(session.get("adminId"),"businessDocumentsPermissions")
    if "edit" in permissionsList:
        businessDocumentId = request.args.get("businessDocumentId","")
        remark = request.form.get("remark","")

        if businessDocumentId and remark:
            try:
                message=""
                business_document_queryset = BusinessDocuments.objects(id=businessDocumentId,status__nin=[2]).first()
                existing_record = business_document_queryset.to_json()
                requestData = [existing_record]
                if business_document_queryset:
                    if business_document_queryset.status == 0:
                        business_document_queryset.update(status=1)
                        flash("Business Document activated successfully!")
                        message=business_document_queryset.adminId.userName+" "+business_document_queryset.name+" Business Document activated successfully!"
                    elif business_document_queryset.status == 1:
                        business_document_queryset.update(status=0)
                        flash("Business Document deactivated successfully!")
                        message=business_document_queryset.adminId.userName+" "+business_document_queryset.name+" Business Document deactivated successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_business_document_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    save_remarks_data=save_admin_remarks_data(businessDocumentId,adminId,remark,"businessDocuments")
                    return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
        else:
            return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
    else:
        flash("Staff member does not have given status update business documents permissions!!")
        return redirect(url_for("business_documents.business_documents_list",redirectTo="BusinessDocument"))
