from appservices.common.util import *
from flask import session
departments = Blueprint("departments",__name__)



@departments.route("/departments_list", methods=["POST", "GET"])
def departments_list():
    if not session.get("GrievanceAdminId"):
        return redirect("login")

    departmentsList = []
    departmentsPagination = ""

   
    GrievanceAdminId = session.get("GrievanceAdminId")
    print(GrievanceAdminId,"((((((((((((GrievanceAdminId))))))))))))")
    # permissionsList = check_permissions(session.get("adminId"), "subservicesPermissions")
    # print(permissionsList, "((((((((permissionsList))))))))")

    # if "view" in permissionsList:
    try:
        redirectTo = request.args.get("redirectTo", "departments")
        redirectval = redirectTo if redirectTo else "departments"

        departments_queryset = Departments.objects(status__in=[0, 1]).order_by("-sorting")
        
        departmentsPage = request.args.get(get_page_parameter('departmentsPage'), type=int, default=1)
        per_page = 20
        total_count = departments_queryset.count()
        start = (departmentsPage - 1) * per_page
        end = min(start + per_page, total_count)

        total_departments = departments_queryset[start:end]
       
        snoCount = start
        for each_department in total_departments:
            snoCount += 1
            departments_dict = fetching_departments(each_department)
            departments_dict["snoCount"] = snoCount
            departmentsList.append(departments_dict)

        departmentsPagination = Pagination(departmentsPage=departmentsPage, total=total_count, page_parameter="departmentsPage", per_page=per_page, alignment="right", record_name="departments")
       
        return render_template("grievance/admin/departments_list.html",
            departmentsPagination=departmentsPagination,
            departmentsList=departmentsList,
            redirectval=redirectval,
        )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch Departments !!"
        return render_template("grievance/admin/departments_list.html",
            departmentsPagination=departmentsPagination,
            departmentsList=departmentsList,
            redirectval=redirectval,
        )
    # else:
    #     flash("Staff member does not have given view Bank Code permissions!!")
    #     return redirect(url_for("admin.dashboard"))


@departments.route("/add_department", methods=["POST", "GET"])
def add_department():
    try:
        if not session.get("GrievanceAdminId"):
            return redirect("login")
        GrievanceAdminId = session.get("GrievanceAdminId")
        # permissionsList = check_permissions(adminId,"subservicesPermissions")
        # if "add" in permissionsList:
        if request.method == "POST":
            departmentName = request.form.get("departmentName", "")
            superiorName = request.form.get("superiorName", "")
            if departmentName:

                try:
                    admin_queryset = GrievanceAdmin.objects(id=GrievanceAdminId, status=1).first()

                    departments_table = Departments(
                        GrievanceAdminId=GrievanceAdminId,
                        departmentName=departmentName,
                        superiorName=superiorName,
                        createdOn=datetime.datetime.now(),
                        status=1,
                            
                    )
                    save_table = departments_table.save()  
                    departmentId = str(departments_table.id)
                    flash("Department saved successfully!")
                    return redirect(url_for("departments.departments_list"))
                except Exception as e:
                    flash("Unable to save Department!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("departments.departments_list"))
            else:
                flash("Required fields are missing!")
                return redirect(url_for("departments.departments_list"))
            # else:
            #     flash("Staff member does not have given create Schemes permissions!!")
            # return redirect(url_for("bank_codes.departments_list"))

    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to Add Department!"
        return render_template("grievance/admin/departments_list.html", error=error)


@departments.route("/update_department_status",methods=["POST","GET"])
def update_department_status():
    if not session.get("GrievanceAdminId"):
        return redirect("login")
    GrievanceAdminId=session.get("GrievanceAdminId")
   
    # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
    # if "edit" in permissionsList:
    departmentId = request.args.get("departmentId","")
    if departmentId:
        try:
            departments_queryset = Departments.objects(id=departmentId,status__nin=[2]).first()
           
            if departments_queryset:
                if departments_queryset.status == 0:
                    departments_queryset.update(status=1)
                    flash("Department activated successfully!")
                   
                elif departments_queryset.status == 1:
                    departments_queryset.update(status=0)
                    flash("Department deactivated successfully!")
                   
                return redirect(url_for("departments.departments_list"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("departments.departments_list"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("departments.departments_list"))
    else:
        return redirect(url_for("departments.departments_list"))
    # else:
    #     flash("Staff member does not have given update status Bank Codes permissions!!")
    #     return redirect(url_for("departments.departments_list"))



# Update scheme
@departments.route("/update_department",methods=["POST","GET"])
def update_department():
    if not session.get("GrievanceAdminId"):
        return redirect("login")
    GrievanceAdminId=session.get("GrievanceAdminId")  
     
    # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
    # if "edit" in permissionsList:
    try:
        departmentId = request.args.get("departmentId","")
        if request.method == "POST":
            departmentName = request.form.get("departmentName","")
            superiorName = request.form.get("superiorName","")
           
            departments_queryset = Departments.objects(id=departmentId).first()
            if departments_queryset:
                departments_queryset.update(
                    departmentName=departmentName,
                    superiorName=superiorName,
                    )
                flash("Department updated successfully!")
                return redirect(url_for("departments.departments_list"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("departments.departments_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Department!!"
        return redirect(url_for("departments.departments_list"))
    # else:
    #     flash("Staff member does not have given update Bank Codes permissions!!")
    #     return redirect(url_for("bank_codes.bank_codes_list"))


# Delete scheme
@departments.route("/delete_department",methods=["GET"])
def delete_department():
    try:
        if not session.get("GrievanceAdminId"):
            return redirect("login")
        GrievanceAdminId=session.get("GrievanceAdminId")
        # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
        # if "delete" in permissionsList:
        if request.method == "GET":
            departmentId = request.args.get("departmentId","")
            departments_queryset = Departments.objects(id=departmentId,status__in=[0,1]).first()
            departments_queryset.update(status=2)
            flash("Department deleted successfully!")
            return redirect(url_for("departments.departments_list"))
        # else:
        #     flash("Staff member does not have given delete Bank Codes permissions!!")
        #     return redirect(url_for("bank_codes.bank_codes_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Department!!")
        return redirect(url_for("departments.departments_list"))