from appservices.common.util import *

sender_mails = Blueprint("sender_mails",__name__)

def fetching_sender_mails(sender_mails_queryset):
    sender_mails_dict = {}
    try:
        sender_mails_dict={
        "id":str(sender_mails_queryset.id),
        "mailType":sender_mails_queryset.mailType,
        "mailsList":sender_mails_queryset.mailsList,
        "mobileNumber":sender_mails_queryset.mobileNumber,
        }        
        if sender_mails_queryset.status==1:
            sender_mails_dict["actionText"] = "Active"
        else:
            sender_mails_dict["actionText"] = "Deactive"

        if sender_mails_queryset.createdOn:
            sender_mails_dict["createdOn"] = sender_mails_queryset.createdOn.strftime("%d-%m-%Y")
        else:
            sender_mails_dict["createdOn"] = ""

        

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return sender_mails_dict

@sender_mails.route("/sender_mails_list", methods=["POST", "GET"])
def sender_mails_list():
    if not session.get("adminId"):
        return redirect("admin_login")

    senderMailsList = []
    senderMailsPagination = ""
    existing_mail_types = []

    try:
        sender_mails_queryset = SenderMails.objects(status__in=[0, 1]).order_by("-sorting")
        for each_sender_mail in sender_mails_queryset:
            existing_mail_types.append(each_sender_mail.mailType)

        
        senderMailsPage = request.args.get(get_page_parameter('senderMailsPage'), type=int, default=1)
        per_page = 20
        total_count = sender_mails_queryset.count()
        start = (senderMailsPage - 1) * per_page
        end = min(start + per_page, total_count)

        total_sender_mails = sender_mails_queryset[start:end]
        snoCount = start
        for each_sender_mail in total_sender_mails:
            snoCount += 1
            sender_mails_dict = fetching_sender_mails(each_sender_mail)
            sender_mails_dict["snoCount"] = snoCount
            senderMailsList.append(sender_mails_dict)

        senderMailsPagination = Pagination(senderMailsPage=senderMailsPage, total=total_count, page_parameter="senderMailsPage", per_page=per_page, alignment="right", record_name="senderMail")

        return render_template("super_admin_templates/sender_mails_list.html",
                               senderMailsPagination=senderMailsPagination,
                               senderMailsList=senderMailsList,
                               existing_mail_types=existing_mail_types, 
                               )

    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch Sender Mails !!"
        return render_template("super_admin_templates/sender_mails_list.html",
                               senderMailsPagination=senderMailsPagination,
                               senderMailsList=senderMailsList,
                               existing_mail_types=existing_mail_types, 
                               )


@sender_mails.route("/add_sender_mail", methods=["POST", "GET"])
def add_sender_mail():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        # permissionsList = check_permissions(adminId,"subservicesPermissions")
        # if "add" in permissionsList:
        if request.method == "POST":
            mailType = request.form.get("mailType", "")
            mailsList = request.form.getlist("mailsList")
            mobileNumber = request.form.getlist("mobileNumber")
            # The date format for the input type "date" is "YYYY-MM-DD"
            if mailType and mailsList and mobileNumber:

                try:
                    admin_queryset = SuperAdmin.objects(id=adminId, status=1).first()

                    sender_mails_table = SenderMails(
                        # adminId=adminId,
                        mailType=mailType,
                        mailsList=mailsList,
                        mobileNumber=mobileNumber,
                        createdOn=datetime.datetime.now(),
                        status=1,        
                    )
                    save_table = sender_mails_table.save()  
                    senderMailId = str(sender_mails_table.id)
                    flash("Sender Mail saved successfully!")
                    return redirect(url_for("sender_mails.sender_mails_list"))
                except Exception as e:
                    flash("Unable to save Sender Mail!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sender_mails.sender_mails_list"))
            else:
                flash("Required fields are missing!")
                return redirect(url_for("sender_mails.sender_mails_list"))
            # else:
            #     flash("Staff member does not have given create Schemes permissions!!")
            # return redirect(url_for("sender_mails.sender_mails_list"))

    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to Add Sender Mail!"
        return render_template("super_admin_templates/sender_mails_list.html", error=error)


@sender_mails.route("/update_sender_mail_status",methods=["POST","GET"])
def update_sender_mail_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
   
    # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
    # if "edit" in permissionsList:
    senderMailId = request.args.get("senderMailId","")
    if senderMailId:
        try:
            sender_mails_queryset = SenderMails.objects(id=senderMailId,status__nin=[2]).first()
           
            if sender_mails_queryset:
                if sender_mails_queryset.status == 0:
                    sender_mails_queryset.update(status=1)
                    flash("Sender Mail activated successfully!")
                   
                elif sender_mails_queryset.status == 1:
                    sender_mails_queryset.update(status=0)
                    flash("Sender Mail deactivated successfully!")
                   
                return redirect(url_for("sender_mails.sender_mails_list"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sender_mails.sender_mails_list"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("sender_mails.sender_mails_list"))
    else:
        return redirect(url_for("sender_mails.sender_mails_list"))
    # else:
    #     flash("Staff member does not have given update status Bank Codes permissions!!")
    #     return redirect(url_for("sender_mails.sender_mails_list"))



# Update scheme
@sender_mails.route("/update_sender_mail", methods=["POST", "GET"])
def update_sender_mail():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")

    date_format = "%Y-%m-%d"
    try:
        senderMailId = request.args.get("senderMailId", "")
        
        if request.method == "POST":
            mailType = request.form.get("mailType", "")
            
            # Assuming mailsList comes as a comma-separated string, split it into a list of emails
            mailsList = request.form.get("mailsList", "").split(",")
            mailsList = [email.strip() for email in mailsList]  # Clean up any extra spaces

            mobileNumber = request.form.get("mobileNumber", "").split(",")
            mobileNumber = [mobile.strip() for mobile in mobileNumber]  # Clean up any extra spaces
            
            # Find the sender mail using the senderMailId
            sender_mails_queryset = SenderMails.objects(id=senderMailId).first()
            
            if sender_mails_queryset:
                sender_mails_queryset.update(
                    mailsList=mailsList,  # Save the list of emails as strings
                    mailType=mailType,
                    mobileNumber=mobileNumber,
                )
                flash("Sender Mail updated successfully!")
                return redirect(url_for("sender_mails.sender_mails_list"))
            else:
                flash("Invalid id!!")
                return redirect(url_for("sender_mails.sender_mails_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Sender Mail!!"
        flash(error)
        return redirect(url_for("sender_mails.sender_mails_list"))


# Delete scheme
@sender_mails.route("/delete_sender_mail",methods=["GET"])
def delete_sender_mail():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        # permissionsList = check_permissions(session.get("adminId"),"subservicesPermissions")
        # if "delete" in permissionsList:
        if request.method == "GET":
            senderMailId = request.args.get("senderMailId","")
            sender_mails_queryset = SenderMails.objects(id=senderMailId,status__in=[0,1]).first()
            sender_mails_queryset.update(status=2)
            flash("Sender Mail deleted successfully!")
            return redirect(url_for("sender_mails.sender_mails_list"))
        # else:
        #     flash("Staff member does not have given delete Bank Codes permissions!!")
        #     return redirect(url_for("bank_codes.sender_mails_list"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Sender Mail!!")
        return redirect(url_for("sender_mails.sender_mails_list"))