from appservices.common.util import *

settlement = Blueprint("settlement",__name__)

# Add Settlement
@settlement.route("/add_settlement",methods=["POST","GET"])
def add_settlement():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        
        if request.method == "POST":
            settlementType = request.form.get("settlementType","")
            settleInHour = request.form.get("settleInHour","")

            print(request.form)
            print(settlementType)
            print(settleInHour)
            print("(((((settleInHour)))))")

            if settlementType and settleInHour:
                try:
                    settlement_table = Settlement(
                        adminId = adminId,
                        settlementType = settlementType,
                        settleInHour = settleInHour,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = settlement_table.save()
                    settlementId = str(settlement_table.id)
                    flash("Settlement saved successfully!")
                    return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
                except Exception as e:
                    flash("Unable to save settlement!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save settlement!!"
        return render_template("super_admin_templates/settlements_list.html",error=error)



def fetching_settlement_details(settlement_queryset):
    settlement_dict = {}
    try:
        settlement_dict={
        "id":str(settlement_queryset.id),
        "settlementType":settlement_queryset.settlementType,
        "settleInHour":settlement_queryset.settleInHour,
        }
        if settlement_queryset.status==1:
            settlement_dict["actionText"] = "Active"
        else:
            settlement_dict["actionText"] = "Deactive"
        if settlement_queryset.createdOn:
            settlement_dict["createdOn"] = settlement_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            settlement_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return settlement_dict

# View All settlement list
@settlement.route("/settlements_list",methods=["POST","GET"])
def settlements_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    settlementsList = []
    try:
        redirectTo = request.args.get("redirectto","Settlement")
        if redirectTo:
            redirectval = redirectTo
        else:
            redirectval = "Settlement"
        search = False  
        search_element = request.args.get('search_element','')
        if not search_element:
            search_element = request.form.get("search_element","")
        if search_element:
            search = True

        page = request.args.get(get_page_parameter(), type=int, default=1)
        page_start,page_end=fetch_limit_length_based_on_page_index(page,20)
        pagination = Pagination(
            page=page,
            record_name='settlements',
            per_page=20,
            alignment="right"
            )
        settlements_queryset = Settlement.objects(adminId=adminId,status__in=[0,1]).order_by("-id")
        if search_element:
            settlements_queryset = settlements_queryset.filter(Q(settlementType__icontains=search_element))
        length = settlements_queryset.count()
        settlements_queryset=settlements_queryset[page_start:page_end]
        for each_settlement in settlements_queryset:
            settlement_dict = fetching_settlement_details(each_settlement)
            settlementsList.append(settlement_dict)
        pagination = Pagination(
            page=page,
            total=length,
            found=length,
            record_name='settlements',
            per_page=20,
            alignment="right"
            )
        return render_template("super_admin_templates/settlements_list.html", 
            settlementsList=settlementsList,
            search_element=search_element,
            redirectval=redirectval,
            pagination=pagination,
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch settlements details!!"
        return render_template("super_admin_templates/settlements_list.html",
            settlementsList=settlementsList,
            search_element=search_element,
            redirectval=redirectval,
            pagination=pagination,
            )

# Update settlement status
@settlement.route("/update_settlement_status",methods=["POST","GET"])
def update_settlement_status():
    if not session.get("adminId"):
        return redirect("admin_login")

    settlementId = request.args.get("settlementId","")

    if settlementId:
        try:
            settlement_queryset = Settlement.objects(id=settlementId,status__nin=[2]).first()
            if settlement_queryset:
                if settlement_queryset.status == 0:
                    settlement_queryset.update(status=1)
                    flash("Settlement activated successfully!")
                elif settlement_queryset.status == 1:
                    settlement_queryset.update(status=0)
                    flash("Settlement deactivated successfully!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
    else:
        return redirect(url_for("settlement.settlements_list"))


# Delete settlement 
@settlement.route("/delete_settlement",methods=["GET"])
def delete_settlement():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        if request.method == "GET":
            settlementId = request.args.get("settlementId","")
            print(settlementId)
            print("((((((((((settlementId))))))))))")
            settlement_queryset = Settlement.objects(id=settlementId,status__in=[0,1]).first()
            if settlement_queryset:
                settlement_queryset.update(status=2)
                flash("Settlement deleted successfully!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete settlement!!")
        return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))


# Update settlement
@settlement.route("/update_settlement",methods=["POST","GET"])
def update_settlement():
    if not session.get("adminId"):
        return redirect("admin_login")
    try:
        settlementId = request.args.get("settlementId","")
        if request.method == "POST":
            settlementType = request.form.get("settlementType","")
            settleInHour = request.form.get("settleInHour","")
            if settlementType and settleInHour:
                try:
                    settlement_queryset = Settlement.objects(id=settlementId).first()
                    if settlement_queryset:
                        settlement_queryset.update(
                            settlementType=settlementType,
                            settleInHour=settleInHour,
                            )
                        flash("Settlement updated successfully!")
                        return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
                    else:
                        flash("Invaild id!!")
                        return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
                except Exception as e:
                    app.logger.error(traceback.format_exc())
                    flash("Unable to update settlement!!")
                    return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to update settlement!!")
        return redirect(url_for("settlement.settlements_list",redirectTo="Settlement"))