from appservices.common.util import *

department_grievances = Blueprint("department_grievances",__name__)



def fetching_department_grievances(grievances_queryset):
    grievances_dict = {}
    try:
        grievances_dict={
        "id":str(grievances_queryset.id),
        "customerName":grievances_queryset.name,
        "customerMobileNumber":grievances_queryset.mobileNumber, 
        "complaint":grievances_queryset.complaint, 
        }

        try:
            if grievances_queryset.userId:
                grievances_dict["userId"]=str(grievances_queryset.userId.id)
                grievances_dict["fullName"]=grievances_queryset.userId.fullName
            else:
                grievances_dict["userId"]=""
                grievances_dict["fullName"]=""
        except Exception as e:
            grievances_dict["userId"]=""
            grievances_dict["fullName"]=""

        try:
            if grievances_queryset.departmentId:
                grievances_dict["departmentId"]=str(grievances_queryset.departmentId.id)
                grievances_dict["departmentName"]=grievances_queryset.departmentId.departmentName
            else:
                grievances_dict["departmentId"]=""
                grievances_dict["departmentName"]=""
        except Exception as e:
            grievances_dict["departmentId"]=""
            grievances_dict["departmentName"]=""

        try:
            if grievances_queryset.assemblyMemberId:
                grievances_dict["assemblyMemberId"]=str(grievances_queryset.assemblyMemberId.id)
                grievances_dict["mlaName"]=grievances_queryset.assemblyMemberId.mlaName
            else:
                grievances_dict["assemblyMemberId"]=""
                grievances_dict["mlaName"]=""
        except Exception as e:
            grievances_dict["assemblyMemberId"]=""
            grievances_dict["mlaName"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["pincodeId"]=str(grievances_queryset.pincodeId.id)
                grievances_dict["pincode"]=grievances_queryset.departmentId.pincode
            else:
                grievances_dict["pincodeId"]=""
                grievances_dict["pincode"]=""
        except Exception as e:
            grievances_dict["pincodeId"]=""
            grievances_dict["pincode"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["blockPoId"]=str(grievances_queryset.pincodeId.blockPoId.id)
                grievances_dict["blockName"]=grievances_queryset.pincodeId.blockPoId.name
            else:
                grievances_dict["blockPoId"]=""
                grievances_dict["blockName"]=""
        except Exception as e:
            grievances_dict["blockPoId"]=""
            grievances_dict["blockName"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["cityId"]=str(grievances_queryset.pincodeId.blockPoId.cityId.id)
                grievances_dict["cityName"]=grievances_queryset.pincodeId.blockPoId.cityId.cityName
            else:
                grievances_dict["cityId"]=""
                grievances_dict["cityName"]=""
        except Exception as e:
            grievances_dict["cityId"]=""
            grievances_dict["cityName"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["stateId"]=str(grievances_queryset.pincodeId.blockPoId.cityId.stateId.id)
                grievances_dict["stateName"]=grievances_queryset.pincodeId.blockPoId.cityId.stateId.stateName
            else:
                grievances_dict["stateId"]=""
                grievances_dict["stateName"]=""
        except Exception as e:
            grievances_dict["stateId"]=""
            grievances_dict["stateName"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["countryId"]=str(grievances_queryset.pincodeId.blockPoId.cityId.stateId.countryId.id)
                grievances_dict["countryName"]=grievances_queryset.pincodeId.blockPoId.cityId.stateId.countryId.countryName
            else:
                grievances_dict["countryId"]=""
                grievances_dict["countryName"]=""
        except Exception as e:
            grievances_dict["countryId"]=""
            grievances_dict["countryName"]=""

        try:
            if grievances_queryset.pincodeId:
                grievances_dict["regionId"]=str(grievances_queryset.pincodeId.blockPoId.cityId.stateId.countryId.regionId.id)
                grievances_dict["regionName"]=grievances_queryset.pincodeId.blockPoId.cityId.stateId.countryId.regionId.regionName
            else:
                grievances_dict["regionId"]=""
                grievances_dict["regionName"]=""
        except Exception as e:
            grievances_dict["regionId"]=""
            grievances_dict["regionName"]=""
        
        if grievances_queryset.status==1:
            grievances_dict["actionText"] = "Active"
        else:
            grievances_dict["actionText"] = "Deactive"

        

        if grievances_queryset.createdOn:
            grievances_dict["createdOn"] = grievances_queryset.createdOn.strftime("%d-%m-%Y")
        else:
            grievances_dict["createdOn"] = ""

        

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return grievances_dict



@department_grievances.route("/department_grievances_list", methods=["POST", "GET"])
def department_grievances_list():
    if not session.get("GrievanceAdminId"):
        return redirect("login")

    grievancesList = []
    usersList = []
    departmentsList = []
    pincodeList = []
    grievancesPagination = ""

   
    GrievanceAdminId = session.get("GrievanceAdminId")
    # permissionsList = check_permissions(session.get("adminId"), "subservicesPermissions")
    # print(permissionsList, "((((((((permissionsList))))))))")

    # if "view" in permissionsList:
    try:
        redirectTo = request.args.get("redirectTo", "grievances")
        redirectval = redirectTo if redirectTo else "grievances"

        grievances_queryset = Grievances.objects(status__in=[0, 1]).order_by("-sorting")
        
        grievancesPage = request.args.get(get_page_parameter('grievancesPage'), type=int, default=1)
        per_page = 20
        total_count = grievances_queryset.count()
        start = (grievancesPage - 1) * per_page
        end = min(start + per_page, total_count)

        total_grievances = grievances_queryset[start:end]
       
        snoCount = start
        for each_grievance in total_grievances:
            snoCount += 1
            grievances_dict = fetching_department_grievances(each_grievance)
            grievances_dict["snoCount"] = snoCount
            grievancesList.append(grievances_dict)

        grievancesPagination = Pagination(grievancesPage=grievancesPage, total=total_count, page_parameter="grievancesPage", per_page=per_page, alignment="right", record_name="grievances")

        users_queryset = Users.objects(status__in=[0, 1]).order_by('sorting')
        for each_user in users_queryset:
            userDict = fetching_user_details(each_user)
            usersList.append(userDict)

        departments_queryset = Departments.objects(status__in=[0, 1]).order_by('sorting')
        for each_department in departments_queryset:
            departments_dict = fetching_departments(each_department)
            departmentsList.append(departments_dict)

        assemblymembers_queryset = AssemblyMembers.objects(status__in=[0, 1]).order_by('sorting')
        for each_assemblymember in assemblymembers_queryset:
            departments_dict = {
                "id":str(assemblymembers_queryset.id),
                "mlaName":assemblymembers_queryset.mlaName,
            }
            departmentsList.append(departments_dict)


        pincode_queryset = Pincodes.objects(status__in=[0, 1]).order_by('sorting')
        for each_pincode in pincode_queryset:
            pincode_dict = fetching_pincode_details(each_pincode)
            pincodeList.append(pincode_dict) 
        

        return render_template("grievance/department/department_grievances_list.html",
            grievancesPagination=grievancesPagination,
            grievancesList=grievancesList,
            usersList=usersList,
            departmentsList=departmentsList,
            pincodeList=pincodeList,
            redirectval=redirectval,
        )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch grievances !!"
        return render_template("grievance/department/department_grievances_list.html",
            grievancesPagination=grievancesPagination,
            grievancesList=grievancesList,
            usersList=usersList,
            departmentsList=departmentsList,
            pincodeList=pincodeList,
            redirectval=redirectval,
        )
    # else:
    #     flash("Staff member does not have given view Bank Code permissions!!")
    #     return redirect(url_for("admin.dashboard"))
