from appservices.common.util import *

sms_apis = Blueprint("sms_apis",__name__)


# Add sms API


def fetching_sms_api_details(sms_apis_queryset):
    sms_api_dict = {}
    try:
        sms_api_dict={
        "id":str(sms_apis_queryset.id),
        "apiName":sms_apis_queryset.apiName,
        "code":sms_apis_queryset.code,
        }
        if sms_apis_queryset.paramsList:
            sms_api_dict["paramsList"] = sms_apis_queryset.paramsList
        else:
            sms_api_dict["paramsList"] = ""

        if sms_apis_queryset.status==1:
            sms_api_dict["actionText"] = "Active"
        else:
            sms_api_dict["actionText"] = "Deactive"

        if sms_apis_queryset.createdOn:
            sms_api_dict["createdOn"] = sms_apis_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            sms_api_dict["createdOn"] = ""

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return sms_api_dict



# View All sms API's
@sms_apis.route("/sms_apis_list",methods=["POST","GET"])
def sms_apis_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    # permissionsList = check_permissions(adminId,"apiGatewaysPermissions")
    # if "view" in permissionsList:    
    smsAPIList =[]
    assignSmsList = []
    smsTemplatesList=[]
    try:
        redirectto = request.args.get('redirectto','smsApis')
        if redirectto:
            redirectval=redirectto
        else:
            redirectval="smsApis"

        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,10)
        # pagination = Pagination(
        #     page=page,
        #     record_name='api_master',
        #     per_page=10,
        #     alignment="right"
        #     )

         ######### sms Api ############

        sms_apis_queryset = smsApis.objects(status__in=[0,1]).order_by("-id").all()
        if search_element:
            sms_apis_queryset = sms_apis_queryset.filter(Q(apiName__icontains=search_element))
        #length = transaction_apis_queryset.count()
        #transaction_apis_queryset=transaction_apis_queryset[page_start:page_end]

        for each_sms_api in sms_apis_queryset:
            sms_api_dict = fetching_sms_api_details(each_sms_api)
            smsAPIList.append(sms_api_dict)

          ######### Assign sms ############
        assign_sms_queryset = AssignSms.objects(status__in=[0,1]).order_by("-id").all()
        if search_element:
            assign_sms_queryset = assign_sms_queryset.filter(Q(apiName__icontains=search_element))

        for each_assign_sms in assign_sms_queryset:
            assign_sms_dict = fetching_assign_sms_details(each_assign_sms)
            assignSmsList.append(assign_sms_dict)

        sms_templates_queryset = SmsTemplates.objects(status__in=[0,1]).order_by("-id").all()
     

        for each_sms_template in sms_templates_queryset:
            sms_templates_dict = fetching_sms_templates_details(each_sms_template)
            smsTemplatesList.append(sms_templates_dict)
   

        return render_template("super_admin_templates/sms_apis_list.html",
            search_element=search_element,
            smsAPIList=smsAPIList,
            assignSmsList=assignSmsList,
            smsTemplatesList=smsTemplatesList,
            #pagination=pagination,
            redirectval = redirectval
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch Sms api details!!"
        return render_template("super_admin_templates/sms_apis_list.html",
            search_element=search_element,
            smsAPIList=smsAPIList,
            assignSmsList=assignSmsList,
            #pagination=pagination,
            redirectval = redirectval,
            smsTemplatesList=smsTemplatesList,
            )
    # else:
    #     flash("Staff member does not have given view api permissions!!")
    #     return render_template("super_admin_templates/api_master_list.html")


@sms_apis.route("/add_sms_api",methods=["POST","GET"])
def add_sms_api():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")

        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()
       
        if request.method == "POST":
            apiName = request.form.get("apiName","")
            code = request.form.get("code","")
           # paramsList = request.form.getlist("paramsList[]")
            inputKeyField = request.form.getlist("inputKeyField[]")
            inputValueField = request.form.getlist("inputValueField[]")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]

            if len(inputKeyField) == len(inputValueField):
                # Create a list of dictionaries
                paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
            else:
                flash("Please give selected params values")
                return redirect(url_for("sms_apis.sms_apis_list"))

            if apiName:
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if admin_queryset:
                        message=admin_queryset.userName+" "+apiName+" Sms Api created successfully!"
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_sms_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    sms_apis_table = smsApis(
                        adminId = adminId,
                        apiName = apiName,
                        code = code,
                        paramsList = paramsList,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = sms_apis_table.save()
                    smsApiId = str(save_table.id)

                    flash("Sms Api added successfully!")
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))

                except Exception as e:
                    flash("Unable to save sms Api!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))

                except Exception as e:
                    flash("Unable to save sms Api!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save sms Api!!"
        return render_template("super_admin_templates/sms_apis_list.html",error=error)


# Update sms api
@sms_apis.route("/update_sms_apis",methods=["POST","GET"])
def update_sms_apis():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")    
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    try:
        smsApiId = request.args.get("smsApiId","")
        if request.method == "POST":
            apiName = request.form.get("apiName","")
            code = request.form.get("code","")
            #paramsList = request.form.getlist("paramsList[]")
            inputKeyField = request.form.getlist("inputKeyField[]")
            inputValueField = request.form.getlist("inputValueField[]")

            jsonData = request.form.to_dict(flat=True)

            if len(inputKeyField) == len(inputValueField):
                # Create a list of dictionaries
                paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
            else:
                flash("Please give selected params values")
                return redirect(url_for("sms_apis.sms_apis_list"))

            sms_api_queryset = smsApis.objects(id=smsApiId,status__nin=[2]).first()
            existing_record = sms_api_queryset.to_json()

            message=sms_api_queryset.adminId.userName+" "+apiName+" sms API updated successfully!"
            requestData=[existing_record]
            updatedrequestData=[jsonData]
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_sms_apis","update",actionDate,client_ip,browser,message,requestData,updatedrequestData)

            if sms_api_queryset:
                sms_api_queryset.update(
                    apiName = apiName,
                    code = code,
                    paramsList = paramsList,
                    )


                flash(" sms API updated successfully!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update sms api!!"
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
    # else:
    #     flash("Staff member does not have given update api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))


# Update sms api status
@sms_apis.route("/update_sms_api_status",methods=["POST","GET"])
def update_sms_api_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    existing_record=""
    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    jsonData = request.form.to_dict(flat=True)

    requestData = [existing_record]
    updatedrequestData = [jsonData]
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    smsApiId = request.args.get("smsApiId","")
    if smsApiId:
        try:
            sms_api_queryset = smsApis.objects(id=smsApiId,status__nin=[2]).first()
            existing_record = sms_api_queryset.to_json()      
           
            if sms_api_queryset:
                if sms_api_queryset.status == 0:
                    sms_api_queryset.update(status=1)
                    flash("sms API activated successfully!")
                    message=sms_api_queryset.adminId.userName+" "+sms_api_queryset.apiName+" sms API activated successfully!"
                elif sms_api_queryset.status == 1:
                    sms_api_queryset.update(status=0)
                    flash("sms API deactivated successfully!")
                    message=sms_api_queryset.adminId.userName+" "+sms_api_queryset.apiName+" sms API deactivated successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_sms_api_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
    else:
        return redirect(url_for("sms_apis.sms_apis_list"))
    # else:
    #     flash("Staff member does not have given update status api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))

# Delete sms API
@sms_apis.route("/delete_sms_api",methods=["GET"])
def delete_sms_api():
    try:
        existing_record=""
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()

        jsonData = request.form.to_dict(flat=True)

        requestData = [existing_record]
        updatedrequestData = [jsonData]
        if request.method == "GET":
            smsApiId = request.args.get("smsApiId","")
            sms_api_queryset = smsApis.objects(id=smsApiId,status__in=[0,1]).first()
            existing_record = sms_api_queryset.to_json()
            sms_api_queryset.update(status=2)
            flash("sms API deleted successfully!")
            message=sms_api_queryset.adminId.userName+" "+sms_api_queryset.apiName+" sms API deleted successfully!"
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_sms_api","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete sms api!!")
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="smsApis"))


############## ASSIGN sms ##############

def fetching_assign_sms_details(assign_sms_queryset):
    assign_sms_dict = {}
    sms_templates_dict={}
    try:
        assign_sms_dict={
        "id":str(assign_sms_queryset.id),
        "smsApiId":str(assign_sms_queryset.smsApiId.id),
        "apiName":assign_sms_queryset.smsApiId.apiName,
        }

        if assign_sms_queryset.otpTypeList:
            assign_sms_dict["otpTypeList"]=[str(each_otptype) for each_otptype in assign_sms_queryset.otpTypeList]
            assign_sms_dict["otpTypeName"] = ', '.join(assign_sms_dict["otpTypeList"])
        else:
            assign_sms_dict["otpTypeList"]=[]


        if assign_sms_queryset.status==1:
            assign_sms_dict["actionText"] = "Active"
        else:
            assign_sms_dict["actionText"] = "Deactive"

        if assign_sms_queryset.createdOn:
            assign_sms_dict["createdOn"] = assign_sms_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            assign_sms_dict["createdOn"] = ""

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return assign_sms_dict


@sms_apis.route("/add_assign_sms_api",methods=["POST","GET"])
def add_assign_sms_api():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()
       
        if request.method == "POST":
            smsApiId = request.form.get("smsApiId","")
            otpTypeList = request.form.getlist("otpTypeList")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]

            if smsApiId:
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if admin_queryset:
                        message=admin_queryset.userName +" Assign sms created successfully!"
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_assign_sms_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    assign_sms_table = AssignSms(
                        adminId = adminId,
                        smsApiId = ObjectId(smsApiId),
                        otpTypeList = otpTypeList,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = assign_sms_table.save()
                    AssignsmsId = str(save_table.id)
                    # if isActive == None:
                    #     save_table.update(isActive=False)
                    # else:
                    #     save_table.update(isActive=True)


                    flash(" Assign sms added successfully!")
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))

                except Exception as e:
                    flash("Unable to save  Assign sms!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))

                except Exception as e:
                    flash("Unable to save  Assign sms!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save  Assign sms!!"
        return render_template("super_admin_templates/sms_apis_list.html",error=error)


# Update transaction api
@sms_apis.route("/update_assign_sms",methods=["POST","GET"])
def update_assign_sms():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")    
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    existing_record=""
    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    try:
        AssignsmsId = request.args.get("AssignsmsId","")
        if request.method == "POST":
            smsApiId = request.form.get("smsApiId","")
            otpTypeList = request.form.getlist("otpTypeList")
            jsonData = request.form.to_dict(flat=True)


            assign_smss_queryset = AssignSms.objects(id=AssignsmsId,status__nin=[2]).first()
            existing_record = assign_smss_queryset.to_json()

            message=assign_smss_queryset.adminId.userName+" Assign sms updated successfully!"
            requestData=[existing_record]
            updatedrequestData=[jsonData]
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_sms","update",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            if assign_smss_queryset:
                assign_smss_queryset.update(
                    smsApiId = ObjectId(smsApiId),
                    # otpTypeList = otpTypeList,
                    otpTypeList=[str(each_otptype) for each_otptype in otpTypeList]
                    )

                flash("Assign sms updated successfully!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Assign sms!!"
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
    # else:
    #     flash("Staff member does not have given update api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))




# Update transaction api status
@sms_apis.route("/update_assign_sms_status",methods=["POST","GET"])
def update_assign_sms_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    jsonData = request.form.to_dict(flat=True)

    existing_record = ""
    updatedrequestData = [jsonData]
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    AssignsmsId = request.args.get("AssignsmsId","")
    if AssignsmsId:
        try:
            assign_sms_queryset = AssignSms.objects(id=AssignsmsId,status__nin=[2]).first()
            existing_record = assign_sms_queryset.to_json()
            requestData = [existing_record]
            if assign_sms_queryset:
                if assign_sms_queryset.status == 0:
                    assign_sms_queryset.update(status=1)
                    flash(" Assign sms activated successfully!")
                    message=assign_sms_queryset.adminId.userName+" Assign sms activated successfully!"
                elif assign_sms_queryset.status == 1:
                    assign_sms_queryset.update(status=0)
                    flash("Assign sms deactivated successfully!")
                    message=assign_sms_queryset.adminId.userName+" "+assign_sms_queryset.otpTypeList+" Assign sms deactivated successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_sms_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
    else:
        return redirect(url_for("sms_apis.sms_apis_list"))
    # else:
    #     flash("Staff member does not have given update status api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))

# Delete Transaction API
@sms_apis.route("/delete_assign_sms",methods=["GET"])
def delete_assign_sms():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()

        jsonData = request.form.to_dict(flat=True)

        existing_record =""
        updatedrequestData = [jsonData]
        if request.method == "GET":
            AssignsmsId = request.args.get("AssignsmsId","")
            assign_sms_queryset = AssignSms.objects(id=AssignsmsId,status__in=[0,1]).first()
            existing_record = assign_sms_queryset.to_json()
            requestData = [existing_record]
            assign_sms_queryset.update(status=2)
            flash("Assign sms deleted successfully!")
            message=assign_sms_queryset.adminId.userName+" Assign sms deleted successfully!"
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_assign_sms","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Assign sms!!")
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="Assignsms"))

##sms templates

def fetching_sms_templates_details(sms_templates_queryset):
    sms_templates_dict = {}
    try:
        sms_templates_dict={
        "id":str(sms_templates_queryset.id),
        "templateContent":sms_templates_queryset.templateContent,
        "apiName":sms_templates_queryset.smsApiId.apiName,
        }
        

        if sms_templates_queryset.otpTypeList:
            sms_templates_dict["otpTypeList"]=[str(each_otptype) for each_otptype in sms_templates_queryset.otpTypeList]
            sms_templates_dict["otpTypeName"] = ', '.join(sms_templates_dict["otpTypeList"])
        else:
            sms_templates_dict["otpTypeList"]=[]



        if sms_templates_queryset.status==1:
            sms_templates_dict["actionText"] = "Active"
        else:
            sms_templates_dict["actionText"] = "Deactive"

        if sms_templates_queryset.createdOn:
            sms_templates_dict["createdOn"] = sms_templates_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            sms_templates_dict["createdOn"] = ""

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return sms_templates_dict


@sms_apis.route("/add_sms_template",methods=["POST","GET"])
def add_sms_template():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()
       
        if request.method == "POST":
            smsApiId = request.form.get("smsApiId","")
            templateContent = request.form.get("templateContent","")
            otpTypeList = request.form.getlist("otpTypeList")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]

            if smsApiId:
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if admin_queryset:
                        message=admin_queryset.userName +" sms template created successfully!"
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_sms_template","create",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    sms_templates_table = SmsTemplates(
                        adminId = adminId,
                        smsApiId = ObjectId(smsApiId),
                        otpTypeList = otpTypeList,
                        templateContent = templateContent,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = sms_templates_table.save()
                    smsTemplateId = str(save_table.id)
                    # if isActive == None:
                    #     save_table.update(isActive=False)
                    # else:
                    #     save_table.update(isActive=True)


                    flash(" sms template added successfully!")
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))

                except Exception as e:
                    flash("Unable to save sms template!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))

                except Exception as e:
                    flash("Unable to save  sms template!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save  sms template!!"
        return render_template("super_admin_templates/sms_apis_list.html",error=error)


# Update transaction api
@sms_apis.route("/update_sms_template",methods=["POST","GET"])
def update_sms_template():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")    
    
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]
    # browser = None
    existing_record=""
    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    try:
        smsTemplateId = request.args.get("smsTemplateId","")
        if request.method == "POST":
            smsApiId = request.form.get("smsApiId","")
            templateContent = request.form.get("templateContent","")
            otpTypeList = request.form.getlist("otpTypeList")
            jsonData = request.form.to_dict(flat=True)


            sms_templates_queryset = SmsTemplates.objects(id=smsTemplateId,status__nin=[2]).first()
            existing_record = sms_templates_queryset.to_json()

            message=sms_templates_queryset.adminId.userName+" sms template updated successfully!"
            requestData=[existing_record]
            updatedrequestData=[jsonData]
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_sms_template","update",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            if sms_templates_queryset:
                sms_templates_queryset.update(
                    smsApiId = ObjectId(smsApiId),
                    templateContent = templateContent,
                    # otpTypeList = otpTypeList,
                    otpTypeList=[str(each_otptype) for each_otptype in otpTypeList]
                    )

                flash("sms template updated successfully!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update sms template!!"
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
    # else:
    #     flash("Staff member does not have given update api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))




# Update transaction api status
@sms_apis.route("/update_sms_template_status",methods=["POST","GET"])
def update_sms_template_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"):
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    jsonData = request.form.to_dict(flat=True)

    existing_record = ""
    updatedrequestData = [jsonData]
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    smsTemplateId = request.args.get("smsTemplateId","")
    if smsTemplateId:
        try:
            sms_templates_queryset = SmsTemplates.objects(id=smsTemplateId,status__nin=[2]).first()
            existing_record = sms_templates_queryset.to_json()
            requestData = [existing_record]
            if sms_templates_queryset:
                if sms_templates_queryset.status == 0:
                    sms_templates_queryset.update(status=1)
                    flash(" sms template activated successfully!")
                    message=sms_templates_queryset.adminId.userName+"sms template activated successfully!"
                elif sms_templates_queryset.status == 1:
                    sms_templates_queryset.update(status=0)
                    flash("sms template deactivated successfully!")
                    message=sms_templates_queryset.adminId.userName+" "+sms_templates_queryset.otpTypeList+" sms template deactivated successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_sms_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
    else:
        return redirect(url_for("sms_apis.sms_apis_list"))
    # else:
    #     flash("Staff member does not have given update status api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))

# Delete Transaction API
@sms_apis.route("/delete_sms_template",methods=["GET"])
def delete_sms_template():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"):
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()

        jsonData = request.form.to_dict(flat=True)

        existing_record =""
        updatedrequestData = [jsonData]
        if request.method == "GET":
            smsTemplateId = request.args.get("smsTemplateId","")
            sms_templates_queryset = SmsTemplates.objects(id=smsTemplateId,status__in=[0,1]).first()
            existing_record = sms_templates_queryset.to_json()
            requestData = [existing_record]
            sms_templates_queryset.update(status=2)
            flash("sms template deleted successfully!")
            message=sms_templates_queryset.adminId.userName+" sms template deleted successfully!"
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_sms_template","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete sms template!!")
        return redirect(url_for("sms_apis.sms_apis_list",redirectTo="SmsTemplates"))