from appservices.common.util import *

documents = Blueprint("documents",__name__)


# @documents.route("/create_document",methods=["POST","GET"])
# def create_document():
#     try:
#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId = session.get("adminId")
#         # permissionsList = check_permissions(adminId,"bankPermissions")
#         # if "add" in permissionsList:
#         if request.method == "GET":
#             return render_template("super_admin_templates/create_document.html")

#         if request.method == "POST":
#             documentName = request.form.get("documentName","")
#             documentContent = request.form.get("documentContent","")

#             if documentName and documentContent:
#                 try:
#                     document_table = Documents(
#                         adminId=adminId,
#                         documentName = documentName,
#                         documentContent = documentContent,
#                         createdOn = datetime.datetime.now(),
#                         status = 1,
#                         )
#                     save_table = document_table.save()
#                     documentId = str(save_table.id)

#                     flash("Document created successfully!")
#                     return redirect(url_for("documents.get_documents_list",redirectTo="document"))
#                 except Exception as e:
#                     flash("Unable to create document details!!")
#                     app.logger.error(traceback.format_exc())
#                     return redirect(url_for("documents.get_documents_list",redirectTo="document"))
#             else:
#                 flash("Required fields are missing!!")
#                 return redirect(url_for("documents.get_documents_list",redirectTo="document"))
#         # else:
#             # flash("Staff member does not have given create bank permissions!!")
#             # return redirect(url_for("documents.get_documents_list",redirectTo="document"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to create document details!!"
#         return render_template("super_admin_templates/documents_list.html",error=error,redirectTo="document")


@documents.route("/edit_document",methods=["POST","GET"])
def edit_document():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    try:
        permissionsList = check_permissions(session.get("adminId"),"documentsPermissions")
        if "edit" in permissionsList:
            documentId = request.args.get("documentId","")
            document_dict = {}
            if request.method == "GET":
                document_queryset = Documents.objects(status=1).order_by("-id").first()
                if document_queryset:
                    document_dict = fetching_document_details(document_queryset)
                return render_template("super_admin_templates/update_document.html",document_dict = document_dict)

            if request.method == "POST":
                documentName = request.form.get("documentName","")
                documentContent = request.form.get("documentContent","")

                if documentName and documentContent:
                    document_queryset = Documents.objects(status=1).order_by("-id").first()
                    if document_queryset:
                        document_table = Documents(
                            adminId=adminId,
                            documentName = documentName,
                            documentContent = documentContent,
                            createdOn = datetime.datetime.now(),
                            status = 1,
                            )
                        save_table = document_table.save()
                    else:
                        document_table = Documents(
                            adminId=adminId,
                            documentName = documentName,
                            documentContent = documentContent,
                            createdOn = datetime.datetime.now(),
                            status = 1,
                            )
                        save_table = document_table.save()
                    flash("Document created successfully!")
                    return redirect(url_for("documents.get_documents_list",redirectTo="document"))
                    
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("documents.get_documents_list",redirectTo="document"))
        else:
            flash("Staff member does not have given update document permissions!!")
            return redirect(url_for("documents.get_documents_list",redirectTo="document"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update document details!!"
        flash(error)
    return redirect(url_for("documents.get_documents_list",redirectTo="document"))


@documents.route("/get_documents_list",methods=["POST","GET"])
def get_documents_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    documentsList = []
    
    adminId = session.get("adminId")
    permissionsList = check_permissions(session.get("adminId"),"documentsPermissions")
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo","document")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = "document"
            search_element = request.args.get("search_element","")


            documents_queryset = Documents.objects(status__in=[0,1]).order_by("-id")
            if search_element:
                documents_queryset = documents_queryset.filter(Q(documentName__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 = documents_queryset.count()

            start = (page - 1) * per_page

            end = min(start + per_page, total_count)

            total_documents = documents_queryset[start:end]
            
            snoCount = start
            for each_document in total_documents:
                snoCount +=1
                document_dict = fetching_document_details(each_document)
                document_dict["snoCount"]=snoCount
                documentsList.append(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="documents")

            return render_template("super_admin_templates/documents_list.html",
                pagination=pagination,
                documentsList=documentsList,
                redirectval=redirectval,
                search_element=search_element
                )
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch documents details!!"
            return render_template("super_admin_templates/documents_list.html", 
                error=error,
                pagination=pagination,
                documentsList=documentsList,
                search_element=search_element
                )
    else:
        flash("Staff member does not have given view documents permissions!!")
        return redirect(url_for("admin.dashboard"))
        # return render_template("super_admin_templates/documents_list.html")

@documents.route("/document_status",methods=["POST","GET"])
def document_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    permissionsList = check_permissions(session.get("adminId"),"documentsPermissions")
    if "edit" in permissionsList:
        documentId = request.args.get("documentId","")

        if documentId:
            try:
                documents_queryset = Documents.objects(id=documentId).first()
                if documents_queryset:
                    if documents_queryset.status == 0:
                        documents_queryset.update(status=1)
                        flash("Document activated successfully!")
                    elif documents_queryset.status == 1:
                        documents_queryset.update(status=0)
                        flash("Document deactivated successfully!")
                    return redirect(url_for("documents.get_documents_list",redirectTo="document"))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("documents.get_documents_list",redirectTo="document"))
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect(url_for("documents.get_documents_list",redirectTo="document"))
        else:
            flash("Required field is missing!!")
            return redirect(url_for("documents.get_documents_list",redirectTo="document"))
    else:
        flash("Staff member does not have given status update document permissions!!")
        return redirect(url_for("documents.get_documents_list",redirectTo="document"))