from appservices.common.util import *

plan_master = Blueprint("plan_master",__name__)

# Add Circle
@plan_master.route("/add_circle",methods=["POST","GET"])
def add_circle():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        
        if request.method == "POST":
            name = request.form.get("name","")
            code = request.form.get("code","")
            circleCode1 = request.form.get("circleCode1","")
            circleCode2 = request.form.get("circleCode2","")
            circleCode3 = request.form.get("circleCode3","")

            try:
                if name and code:
                    circle_table =Circles(
                        adminId=adminId,
                        name=name,
                        code=code,
                        circleCode1=circleCode1,
                        circleCode2=circleCode2,
                        circleCode3=circleCode3,
                        createdOn = datetime.datetime.now(),
                        status = 1
                        )
                    save_table = circle_table.save()
                    circleId = str(save_table.id)
                    flash("Circle added successfully!")
                    return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
                else:
                    flash("Required fields are missing!!")
                    return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
            except Exception as e:
                flash("Unable to save circle!!")
                app.logger.error(traceback.format_exc())
                return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save circle!!"
        return render_template("super_admin_templates/plan_masters_list.html",error=error)


def fetching_circle_details(circle_queryset):
    circle_dict = {}
    try:
        circle_dict={
        "id":str(circle_queryset.id),
        "name":circle_queryset.name,
        "code":circle_queryset.code,
        "circleCode1":circle_queryset.circleCode1,
        "circleCode2":circle_queryset.circleCode2,
        "circleCode3":circle_queryset.circleCode3,
        }
        if circle_queryset.status==1:
            circle_dict["actionText"] = "Active"
        else:
            circle_dict["actionText"] = "Deactive"
        if circle_queryset.createdOn:
            circle_dict["createdOn"] = circle_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            circle_dict["createdOn"] = ""
    except Exception as e:
        app.logger.error(traceback.format_exc())
    return circle_dict

# View All Circle masters List
@plan_master.route("/plan_masters_list",methods=["POST","GET"])
def plan_masters_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    
    adminId = session.get("adminId")
    try:
        redirectTo = request.args.get("redirectTo","Circle")
        if redirectTo:
            redirectval = redirectTo
        else:
            redirectval = "Circle"
        circlesList = []
        circleSeriesList = []
        rechargePlansList = []
        search_element = request.form.get("search_element","")
        page = request.args.get(get_page_parameter(), type=int, default=1)
        page_start,page_end=fetch_limit_length_based_on_page_index(page,10)
        pagination = Pagination(
            page=page,
            record_name='plan_masters',
            per_page=10,
            alignment="right"
            )
        circles_queryset = Circles.objects(status__in=[0,1]).order_by("-id")
        if search_element:
            circles_queryset = circles_queryset.filter(Q(name__icontains=search_element))
        length = circles_queryset.count()
        circles_queryset=circles_queryset[page_start:page_end]

        for each_circle in circles_queryset:
            circle_data = fetching_circle_details(each_circle)
            circlesList.append(circle_data)


        ################# Circle Series #################
        # circle_series_queryset = CircleSeries.objects(status__in=[0,1]).order_by("-id")
        # if search_element:
        #     circle_series_queryset = circle_series_queryset.filter(Q(numberPrefix__icontains=search_element))
        # length = circle_series_queryset.count()
        # circle_series_queryset=circle_series_queryset[page_start:page_end]

        # for each_circle_series in circle_series_queryset:
        #     circle_series_data = fetching_circle_series_details(each_circle_series)
        #     circleSeriesList.append(circle_series_data)

        # ############# Recharge plans ################
        # recharge_plans_queryset = RechargePlans.objects(status__in=[0,1]).order_by("-id")
        # if search_element:
        #     recharge_plans_queryset = recharge_plans_queryset.filter(Q(name__icontains=search_element))
        # length = recharge_plans_queryset.count()
        # recharge_plans_queryset=recharge_plans_queryset[page_start:page_end]

        # for each_recharge_plans in recharge_plans_queryset:
        #     recharge_plans_data = fetching_recharge_plans_details(each_recharge_plans)
        #     rechargePlansList.append(recharge_plans_data)


        return render_template("super_admin_templates/plan_master_list.html",
            search_element=search_element,
            circlesList=circlesList,
            circleSeriesList=circleSeriesList,
            rechargePlansList=rechargePlansList,
            redirectval=redirectval,
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch circles details!!"
        return render_template("super_admin_templates/plan_master_list.html", 
            error=error,
            search_element=search_element,
            circlesList=circlesList,
            circleSeriesList=circleSeriesList,
            rechargePlansList=rechargePlansList,
            redirectval=redirectval,
            )

# Update Circle
@plan_master.route("/update_circle",methods=["POST","GET"])
def update_circle():
    if not session.get("adminId"):
        return redirect("admin_login")
    try:
        circleId = request.args.get("circleId","")
        if request.method == "POST":
            name = request.form.get("name","")
            code = request.form.get("code","")
            circleCode1 = request.form.get("circleCode1","")
            circleCode2 = request.form.get("circleCode2","")
            circleCode3 = request.form.get("circleCode3","")

        if circleId and name and code:
            circle_queryset = Circles.objects(id=circleId,status__in=[0,1]).first()
            if circle_queryset:
                circle_queryset.update(
                    name=name,
                    code=code,
                    circleCode1=circleCode1,
                    circleCode2=circleCode2,
                    circleCode3=circleCode3,
                    )
                flash("Circle updated successfully!")
                return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
        else:
            flash("Required fields are missing!!")
            return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))

    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update circle details!!"
        return redirect(url_for("plan_master.plan_masters_list",error=error))

# Update Circle status
@plan_master.route("/update_circle_status",methods=["POST","GET"])
def update_circle_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    circleId = request.args.get("circleId","")
    try:
        if circleId:
            circle_queryset = Circles.objects(id=circleId,status__in=[0,1]).first()
            if circle_queryset:
                if circle_queryset.status == 0:
                    circle_queryset.update(status=1)
                    flash("Circle activated successfully!")
                elif circle_queryset.status == 1:
                    circle_queryset.update(status=0)
                    flash("Circle deactivated successfully!")
                return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
        else:
            flash("Required field is missing!!")
            return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return redirect(url_for("plan_master.plan_masters_list"))

# Delete Circle
@plan_master.route("/delete_circle",methods=["POST","GET"])
def delete_circle():
    if not session.get("adminId"):
        return redirect("admin_login")
    circleId = request.args.get("circleId","")
    try:
        circle_queryset = Circles.objects(id=circleId,status__in=[0,1]).first()
        if circle_queryset:
            circle_queryset.update(status=2)
            flash("Circle successfully!")
            return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
        else:
            flash("Invaild id!!")
            return redirect(url_for("plan_master.plan_masters_list",redirectTo="Circle"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return redirect(url_for("plan_master.plan_masters_list"))


############## Add Circle Series ################
# # Add Circle Series
# @plan_master.route("/add_circle_series",methods=["POST","GET"])
# def add_circle_series():
#     try:
#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId = session.get("adminId")
        
#         if request.method == "POST":
#             numberPrefix = request.form.get("numberPrefix","")
#             circleId = request.form.get("circleId")
#             operatorId = request.form.get("operatorId","")
#             isUpdate = request.form.get("isUpdate")
#             isCalledForUpdate = request.form.get("isCalledForUpdate")

#             if numberPrefix and circleId:
#                 try:
#                     circle_series_table =CircleSeries(
#                         numberPrefix=numberPrefix,
#                         circleId=circleId,
#                         operatorId=operatorId,
#                         createdOn = datetime.datetime.now(),
#                         status = 1
#                         )
#                     save_table = circle_series_table.save()
#                     circleSeriesId = str(save_table.id)

#                     if isUpdate == None:
#                         save_table.update(isUpdate=False)
#                     else:
#                         save_table.update(isUpdate=True)

#                     if isCalledForUpdate == None:
#                         save_table.update(isCalledForUpdate=False)
#                     else:
#                         save_table.update(isCalledForUpdate=True)

#                     flash("Circle Series added successfully!")
#                     return redirect(url_for("plan_master.plan_masters_list"))
#                 except Exception as e:
#                     flash("Unable to save circle series!!")
#                     app.logger.error(traceback.format_exc())
#                     return redirect(url_for("plan_master.plan_masters_list"))
#             else:
#                 flash("Required fields are missing!!")
#                 return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to save circle series!!"
#         return render_template("super_admin_templates/plan_masters_list.html",error=error)

# def fetching_circle_series_details(circle_series_queryset):
#     circle_series_dict = {}
#     try:
#         circle_series_dict={
#         "id":str(circle_series_queryset.id),
#         "numberPrefix":circle_series_queryset.numberPrefix,
#         "circleId":str(circle_series_queryset.circleId.id),
#         "circleName":circle_series_queryset.circleId.name,
#         "operatorId":str(circle_series_queryset.operatorId.id),
#         "operatorName":circle_series_queryset.operatorId.operatorName,
#         "isUpdate":circle_series_queryset.isUpdate,
#         "isCalledForUpdate":circle_series_queryset.isCalledForUpdate,
#         }
#         if circle_series_queryset.status==1:
#             circle_series_dict["actionText"] = "Active"
#         else:
#             circle_series_dict["actionText"] = "Deactive"
#         if circle_series_queryset.createdOn:
#             circle_series_dict["createdOn"] = circle_series_queryset.createdOn.strftime("%m-%d-%Y")
#         else:
#             circle_series_dict["createdOn"] = ""
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#     return circle_series_dict

# # Update Circle Series
# @plan_master.route("/update_circle_series",methods=["POST","GET"])
# def update_circle_series():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     try:
#         circleSeriesId = request.args.get("circleSeriesId","")
#         if request.method == "POST":
#             numberPrefix = request.form.get("numberPrefix","")
#             circleId = request.form.get("circleId")
#             operatorId = request.form.get("operatorId","")
#             isUpdate = request.form.get("isUpdate")
#             isCalledForUpdate = request.form.get("isCalledForUpdate")

#             if circleSeriesId and numberPrefix and circleId:
#                 try:    
#                     circle_series_queryset = CircleSeries.objects(id=circleSeriesId,status__in=[0,1]).first()
#                     if circle_series_queryset:
#                         circle_series_queryset.update(
#                             numberPrefix=numberPrefix,
#                             circleId=ObjectId(circleId),
#                             operatorId=ObjectId(operatorId),
#                             )
#                         if isUpdate == None:
#                             circle_series_queryset.update(isUpdate=False)
#                         else:
#                             circle_series_queryset.update(isUpdate=True)
#                         if isCalledForUpdate == None:
#                             circle_series_queryset.update(isCalledForUpdate=False)
#                         else:
#                             circle_series_queryset.update(isCalledForUpdate=True)
#                         flash("Circle Series updated successfully!")
#                         return redirect(url_for("plan_master.plan_masters_list"))
#                     else:
#                         flash("Invaild id!!")
#                         return redirect(url_for("plan_master.plan_masters_list"))
#                 except Exception as e:
#                     app.logger.error(traceback.format_exc())
#                     flash("Unable to update circle series!!")
#                     return redirect(url_for("plan_master.plan_masters_list"))
#             else:
#                 flash("Required fields are missing!!")
#                 return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to update circle series!!"
#         return redirect(url_for("plan_master.plan_masters_list",error=error))


# # update circle series status
# @plan_master.route("/update_circle_series_status",methods=["POST","GET"])
# def update_circle_series_status():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     circleSeriesId = request.args.get("circleSeriesId","")
#     try:
#         circle_series_queryset = CircleSeries.objects(id=circleSeriesId,status__in=[0,1]).first()
#         if circle_series_queryset:
#             if circle_series_queryset.status == 0:
#                 circle_series_queryset.update(status=1)
#                 flash("Circle Series activated successfully!")
#             elif circle_series_queryset.status == 1:
#                 circle_series_queryset.update(status=0)
#                 flash("Circle Series deactivated successfully!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#         else:
#             flash("Invaild id!!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         return redirect(url_for("plan_master.plan_masters_list"))

# # Delete Circle Series
# @plan_master.route("/delete_circle_series",methods=["POST","GET"])
# def delete_circle_series():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     circleSeriesId = request.args.get("circleSeriesId","")
#     try:
#         circle_series_queryset = CircleSeries.objects(id=circleSeriesId,status__in=[0,1]).first()
#         if circle_series_queryset:
#             circle_series_queryset.update(status=2)
#             flash("Circle Series successfully!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#         else:
#             flash("Invaild id!!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         return redirect(url_for("plan_master.plan_masters_list"))



# ############## Rechage Plans ################
# @plan_master.route("/add_recharge_plan",methods=["POST","GET"])
# def add_recharge_plan():
#     try:

#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId = session.get("adminId")

#         if request.method == "POST":
#             planId = request.form.get("planId","")
#             circleId = request.form.get("circleId","")
#             operatorId = request.form.get("operatorId","")
#             amount = request.form.get("amount",0.00)
#             validity = request.form.get("validity","")
#             shortDesc = request.form.get("shortDesc","")
#             longDesc = request.form.get("longDesc","")
#             planType = request.form.get("planType","")


#             if planId and circleId and operatorId and amount and validity:
#                 try:
#                     recharge_plan_table= RechargePlans(
#                         adminId=adminId,
#                         planId=planId,
#                         circleId=circleId,
#                         operatorId=operatorId,
#                         amount=amount,
#                         validity=validity,
#                         shortDesc=shortDesc,
#                         longDesc=longDesc,
#                         planType=planType,
#                         )
#                     recharge_plan_table.save()
#                     rechargePlanID = str(recharge_plan_table.id)
#                     flash("Recharge Plan added successfully!")
#                     return redirect(url_for("plan_master.plan_masters_list"))
#                 except Exception as e:
#                     app.logger.error(traceback.format_exc())
#                     flash("Unable to add recharge plan!!")
#                     return redirect(url_for("plan_master.plan_masters_list"))
#             else:
#                 flash("Required fields are missing!!")
#                 return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to add recharge plan!!"
#         return render_template("super_admin_templates/plan_masters_list.html",error=error)

# def fetching_recharge_plan_details(recharge_plan_queryset):
#     try:
#         recharge_plan_dict={
#         "id":str(recharge_plan_queryset.id),
#         "planId":str(recharge_plan_queryset.planId.id),
#         "circleId":str(recharge_plan_queryset.circleId.id),
#         "circleName":recharge_plan_queryset.circleId.name,
#         "operatorId":str(recharge_plan_queryset.operatorId.id),
#         "operatorName":recharge_plan_queryset.operatorId.operatorName,
#         "amount":recharge_plan_queryset.amount,
#         "validity":recharge_plan_queryset.validity,
#         "shortDesc":recharge_plan_queryset.shortDesc,
#         "longDesc":recharge_plan_queryset.longDesc,
#         "planType":recharge_plan_queryset.planType,
#         }
#         if recharge_plan_queryset.status==1:
#             recharge_plan_dict["actionText"] = "Active"
#         else:
#             recharge_plan_dict["actionText"] = "Deactive"

#         if recharge_plan_queryset.createdOn:
#             recharge_plan_dict["createdOn"] = recharge_plan_queryset.createdOn.strftime("%m-%d-%Y")
#         else:
#             recharge_plan_dict["createdOn"] = ""
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#     return recharge_plan_dict

# # Update Recharge Plan
# @plan_master.route("/update_recharge_plan",methods=["POST","GET"])
# def update_recharge_plan():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     try:
#         rechargePlanId = request.args.get("rechargePlanId","")
#         if request.method == "POST":
#             planId = request.form.get("planId","")
#             circleId = request.form.get("circleId","")
#             operatorId = request.form.get("operatorId","")
#             amount = request.form.get("amount",0.00)
#             validity = request.form.get("validity","")
#             shortDesc = request.form.get("shortDesc","")
#             longDesc = request.form.get("longDesc","")
#             planType = request.form.get("planType","")

#             if rechargePlanId and planId and circleId and operatorId and amount and validity:
#                 try:
#                     recharge_plan_queryset = RechargePlans.objects(id=rechargePlanId,status__in=[0,1]).first()
#                     if recharge_plan_queryset:
#                         recharge_plan_queryset.update(
#                             planId=planId,
#                             circleId=ObjectId(circleId),
#                             operatorId=ObjectId(operatorId),
#                             amount=amount,
#                             validity=validity,
#                             shortDesc=shortDesc,
#                             longDesc=longDesc,
#                             planType=planType,
#                             )
#                         flash("Recharge Plan updated successfully!")
#                         return redirect(url_for("plan_master.plan_masters_list"))
#                     else:
#                         flash("Invaild id!!")
#                         return redirect(url_for("plan_master.plan_masters_list"))
#                 except Exception as e:
#                     app.logger.error(traceback.format_exc())
#                     flash("Unable to update recharge plan!!")
#                     return redirect(url_for("plan_master.plan_masters_list"))
#             else:
#                 flash("Required fields are missing!!")
#                 return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to update recharge plan!!"
#         return redirect(url_for("plan_master.plan_masters_list",error=error))


# # update recharge plan status
# @plan_master.route("/update_recharge_plan_status",methods=["POST","GET"])
# def update_recharge_plan_status():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     rechargePlanId = request.args.get("rechargePlanId","")
#     try:
#         recharge_plan_queryset = RechargePlans.objects(id=rechargePlanId,status__in=[0,1]).first()
#         if recharge_plan_queryset:
#             if recharge_plan_queryset.status == 0:
#                 recharge_plan_queryset.update(status=1)
#                 flash("Recharge Plan activated successfully!")
#             elif recharge_plan_queryset.status == 1:
#                 recharge_plan_queryset.update(status=0)
#                 flash("Recharge Plan deactivated successfully!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#         else:
#             flash("Invaild id!!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         return redirect(url_for("plan_master.plan_masters_list"))

# # Delete Recharge Plan
# @plan_master.route("/delete_recharge_plan",methods=["POST","GET"])
# def delete_recharge_plan():
#     if not session.get("adminId"):
#         return redirect("admin_login")
#     rechargePlanId = request.args.get("rechargePlanId","")
#     try:
#         recharge_plan_queryset = RechargePlans.objects(id=rechargePlanId,status__in=[0,1]).first()
#         if recharge_plan_queryset:
#             recharge_plan_queryset.update(status=2)
#             flash("Recharge Plan successfully!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#         else:
#             flash("Invaild id!!")
#             return redirect(url_for("plan_master.plan_masters_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         return redirect(url_for("plan_master.plan_masters_list"))