from appservices.common.util import *
from flask import session
departmentUsers = Blueprint("departmentUsers",__name__)


@departmentUsers.route("/departmentUsers_list", methods=["POST", "GET"])
def departmentUsers_list():
    if not session.get("GrievanceAdminId"):
        return redirect("login")

    departmentUsersList = []
    grievancesList = []
    departmentsList = []
    departmentUsersPagination = ""

   
    GrievanceAdminId = session.get("GrievanceAdminId")
    # permissionsList = check_permissions(session.get("adminId"), "subservicesPermissions")
    # print(permissionsList, "((((((((permissionsList))))))))")

    # if "view" in permissionsList:
    try:
        redirectTo = request.args.get("redirectTo", "departmentUsers")
        redirectval = redirectTo if redirectTo else "departmentUsers"

        departmentUsers_queryset = GrievanceDepartmentUsers.objects(status__in=[0, 1]).order_by("-sorting")

        departmentUsersPage = request.args.get(get_page_parameter('departmentUsersPage'), type=int, default=1)
        per_page = 20
        total_count = departmentUsers_queryset.count()
        start = (departmentUsersPage - 1) * per_page
        end = min(start + per_page, total_count)

        total_departmentUsers = departmentUsers_queryset[start:end]
       
        snoCount = start
        for each_departmentUser in total_departmentUsers:
            snoCount += 1
            departmentUsers_dict = fetching_departmentUsers(each_departmentUser)
            departmentUsers_dict["snoCount"] = snoCount
            departmentUsersList.append(departmentUsers_dict)

        departmentUsersPagination = Pagination(departmentUsersPage=departmentUsersPage, total=total_count, page_parameter="departmentUsersPage", per_page=per_page, alignment="right", record_name="departmentUser")

       
        grievance_queryset = GrievanceAdmin.objects(status__in=[0, 1]).order_by('sorting')
        for each_grievance in grievance_queryset:

            grievance_dict = fetch_admin_details(each_grievance)
            grievancesList.append(grievance_dict)

        departments_queryset = Departments.objects(status__in=[0, 1]).order_by('sorting')
        for each_department in departments_queryset:
            department_dict = fetching_departments(each_department)
            departmentsList.append(department_dict)

        
        return render_template("grievance/admin/departments_users_list.html",
            departmentUsersPagination=departmentUsersPagination,
            grievancesList=grievancesList,
            departmentsList=departmentsList,
            departmentUsersList=departmentUsersList,
            redirectval=redirectval,
        )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch Department User !!"
        return render_template("grievance/admin/departments_users_list.html",
            departmentUsersPagination=departmentUsersPagination,
            grievancesList=grievancesList,
            departmentsList=departmentsList,
            departmentUsersList=departmentUsersList,
            redirectval=redirectval,
        )
    # else:
    #     flash("Staff member does not have given view Bank Code permissions!!")
    #     return redirect(url_for("admin.dashboard"))


@departmentUsers.route("/add_departmentUsers", methods=["POST", "GET"])
def add_departmentUsers():
    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":
            # GrievanceAdminId = request.form.get("GrievanceAdminId", "")
            userName = request.form.get("userName", "")
            mobileNumber = request.form.get("mobileNumber", "")
            password = request.form.get("password", "")
            email = request.form.get("email", "")
            departmentIdList = request.form.getlist("departmentIdList")
            
            if GrievanceAdminId and departmentIdList:
                try:
                    # admin_queryset = GrievanceAdmin.objects(id=GrievanceAdminId, status=1).first()

                    departmentUsers_table = GrievanceDepartmentUsers(
                        GrievanceAdminId=GrievanceAdminId,
                        userName=userName,
                        mobileNumber=mobileNumber,
                        password  = generate_password_hash(password),
                        email=email,
                        departmentIdList=departmentIdList,
                        createdOn=datetime.datetime.now(),
                        status=1,
                            
                    )
                    save_table = departmentUsers_table.save()  
                    departmentUserId = str(departmentUsers_table.id)
                    flash("Department User saved successfully!")
                    return redirect(url_for("departmentUsers.departmentUsers_list"))
                except Exception as e:
                    flash("Unable to save Department User!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("departmentUsers.departmentUsers_list"))
            else:
                flash("Required fields are missing!")
                return redirect(url_for("departmentUsers.departmentUsers_list"))
            # else:
            #     flash("Staff member does not have given create Schemes permissions!!")
            # return redirect(url_for("bank_codes.bank_codes_list"))

    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to Add Department User!"
        return render_template("grievance/admin/departments_users_list.html", error=error)


@departmentUsers.route("/update_departmentUser_status",methods=["POST","GET"])
def update_departmentUser_status():
    if not session.get("GrievanceAdminId"):
        return redirect("login")
    GrievanceAdminId=session.get("GrievanceAdminId")
   
    # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
    # if "edit" in permissionsList:
    departmentUserId = request.args.get("departmentUserId","")
    if departmentUserId:
        try:
            departmentUsers_queryset = GrievanceDepartmentUsers.objects(id=departmentUserId,status__nin=[2]).first()
           
            if departmentUsers_queryset:
                if departmentUsers_queryset.status == 0:
                    departmentUsers_queryset.update(status=1)
                    flash("Department user activated successfully!")
                   
                elif departmentUsers_queryset.status == 1:
                    departmentUsers_queryset.update(status=0)
                    flash("Department user deactivated successfully!")
                   
                return redirect(url_for("departmentUsers.departmentUsers_list"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("departmentUsers.departmentUsers_list"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("departmentUsers.departmentUsers_list"))
    else:
        return redirect(url_for("departmentUsers.departmentUsers_list"))
    # else:
    #     flash("Staff member does not have given update status Bank Codes permissions!!")
    #     return redirect(url_for("bank_codes.bank_codes_list"))



# Update scheme
@departmentUsers.route("/update_departmentUser",methods=["POST","GET"])
def update_departmentUser():
    if not session.get("GrievanceAdminId"):
        return redirect("login")
    GrievanceAdminId=session.get("GrievanceAdminId")  
     

    # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
    # if "edit" in permissionsList:
    try:
        departmentUserId = request.args.get("departmentUserId","")
        if request.method == "POST":
            print(request.form,"(((((((((((Request)))))))))))")
            # GrievanceAdminId = request.form.get("GrievanceAdminId","")
            departmentIdList = [ObjectId(department_id) for department_id in request.form.getlist("departmentIdList")]
            print(departmentIdList,"(((((((((((departmentIdList)))))))))))")
            userName = request.form.get("userName","")
            mobileNumber = request.form.get("mobileNumber","")
            password = request.form.get("password","")
            email = request.form.get("email","")
           
            departmentUsers_queryset = GrievanceDepartmentUsers.objects(id=departmentUserId).first()
            if departmentUsers_queryset:
                departmentUsers_queryset.update(
                    departmentIdList=departmentIdList,
                    userName=userName,
                    mobileNumber=mobileNumber,
                    email=email,
                    )
                if password:
                    departmentUsers_queryset.update(password=generate_password_hash(password))
                flash("Department User updated successfully!")
                return redirect(url_for("departmentUsers.departmentUsers_list"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("departmentUsers.departmentUsers_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Department User!!"
        return redirect(url_for("departmentUsers.departmentUsers_list"))
    # else:
    #     flash("Staff member does not have given update Bank Codes permissions!!")
    #     return redirect(url_for("bank_codes.bank_codes_list"))


# Delete scheme
@departmentUsers.route("/delete_departmentUser",methods=["GET"])
def delete_departmentUser():
    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":
            departmentUserId = request.args.get("departmentUserId","")
            departmentUsers_queryset = GrievanceDepartmentUsers.objects(id=departmentUserId,status__in=[0,1]).first()
            departmentUsers_queryset.update(status=2)
            flash("Department User deleted successfully!")
            return redirect(url_for("departmentUsers.departmentUsers_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 User !!")
        return redirect(url_for("departmentUsers.departmentUsers_list"))


