from appservices.common.util import *
from appservices.common.form_schemas import *
# from appservices.common.payment_gateways.idfc_payment_gateways import *



Prepaid_Operators = Blueprint("Prepaid_Operators",__name__)


@Prepaid_Operators.route("/add_Prepaid_Operators",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_Prepaid_Operators():
    data_status={"responseStatus":0,"result":""}
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        
        csrf_token = request.form.get("csrf_token")
        print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
        latitude = request.form.get("latitude", "")
        longitude = request.form.get("longitude", "")
        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

        createdOn=datetime.datetime.now()
        permissionsList = check_permissions(adminId,"prepaidOperationPermission")
        if "add" in permissionsList:
            if request.method == "POST":
                name = request.form.get("name","")
                operatorCode = request.form.get("operatorCode","")
                prepaidPgId = request.form.get("prepaidPgId","")
                image = request.files.get("image","")
                print("(((((((((((name())))))operatorCode))))))",operatorCode,name,prepaidPgId)

                jsonData = request.form.to_dict(flat=True)
                requestData = [jsonData]
                updatedrequestData = [jsonData]


                form = AddPrepaidOperators()
                if form.validate_on_submit():
                    if name and operatorCode and prepaidPgId:

                        # if not is_valid_alphanumeric(name):
                        #     flash("Name must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                        #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

                        # if not is_valid_alphanumeric(operatorCode):
                        #     flash("Operator Code must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                        #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

                        print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",name,operatorCode,prepaidPgId)
                        try:
                            admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                            if admin_queryset:
                                message = "Successfully created  Prepaid Operators"
                                message=admin_queryset.userName+" "+name+"  Successfully created  Prepaid Operators"
                                save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_Prepaid_Operators","create",createdOn,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
                                
                            prepaid_master_table = PrepaidOperators(
                                adminId=adminId,
                                name = name,
                                operatorCode = operatorCode,
                                prepaidPgId = prepaidPgId,
                                createdOn = datetime.datetime.now(),
                                status = 1,
                                )
                            save_table = prepaid_master_table.save()

                            prepaid_id = str(save_table.id)
                            print(save_table,"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")

                            if image:
                            
                                if not os.path.exists(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/")):
                                    os.makedirs(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/"))
                                save_file = image.save(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/"+prepaid_id+".png"))
                                save_table.update(image="media/prepaidOperators/"+prepaid_id+".png")


                            flash("prepaid operations saved successfully!")
                            data_status['responseStatus']=1
                            return data_status
                        except Exception as e:
                            flash("Unable to save prepaid operations details!!")
                            app.logger.error(traceback.format_exc())
                            data_status['responseStatus']=4
                            return data_status
                    else:
                        data_status['responseStatus']=2
                        data_status['result']="Required fields are missing!!"
                        return data_status

                else:
                    data_status['result']=form.errors
                    return data_status



                # if name and operatorCode and prepaidPgId:

                #     if not is_valid_alphanumeric(name):
                #         flash("Name must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                #         return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

                #     if not is_valid_alphanumeric(operatorCode):
                #         flash("Operator Code must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                #         return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

                #     print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",name,operatorCode,prepaidPgId)
                #     try:
                #         admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                #         if admin_queryset:
                #             message = "Successfully created  Prepaid Operators"
                #             save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_Prepaid_Operators","create",createdOn,client_ip,browser,message,requestData,updatedrequestData) 
                            
                #         prepaid_master_table = PrepaidOperators(
                #             adminId=adminId,
                #             name = name,
                #             operatorCode = operatorCode,
                #             prepaidPgId = prepaidPgId,
                #             createdOn = datetime.datetime.now(),
                #             status = 1,
                #             )
                #         save_table = prepaid_master_table.save()
                #         print(save_table,"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")

                #         flash("prepaid operations saved successfully!")
                #         return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
                #     except Exception as e:
                #         flash("Unable to save prepaid operations details!!")
                #         app.logger.error(traceback.format_exc())
                #         return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
                # else:
                #     flash("Required fields are missing!!")
                #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
            else:
                return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
        else:
            flash("The staff member does not have permission to create a Prepaid operation.", "danger")
            data_status['responseStatus']=4
            return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save Prepaid Operators!!"
        flash("Unable to save Prepaid Operators!!")
        data_status['responseStatus']=4
        return data_status
    




@Prepaid_Operators.route("/get_Prepaid_Operators",methods=["POST","GET"])
@adminid_access_token_required
def get_Prepaid_Operators():
    if not session.get("adminId"):
        return redirect("admin_login")
    Prepaid_Operators_List = []
    transctionsApiList=[]
    search_element=""
    redirectval=""
    pagination=""
    snoCount=0
    prepaidOperatorsPage=None
    form = SearchPrepaidOperatorsName(request.args)

    print("(((((((((((((((((Prepaid_Operators )))))))))))))))))")
    adminId = session.get("adminId")
    permissionsList = check_permissions(session.get("adminId"),"prepaidOperationPermission")
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo","")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = ""
            search_element = request.args.get("search_element","")
                    
            print(search_element,"________________line 109_____________________________")

            if form.validate():
                if search_element:
                    search_element = form.search_element.data
                prepaidOperatorsPage = request.args.get(get_page_parameter("prepaidOperatorsPage"), type=int, default=1)

                per_page = 20
                start = (prepaidOperatorsPage - 1) * per_page

                total_count=0
                filters = Q(status__in=[0, 1])

                if search_element and search_element.strip():
                    filters &= Q(name__icontains=search_element.strip())

                total_count = PrepaidOperators.objects(filters).count()

                Prepaid_Operators_queryset = (
                    PrepaidOperators.objects(filters)
                    .only("id","name","operatorCode","prepaidPgId","image","status")
                    .order_by("-id")
                    .skip(start)
                    .limit(per_page)
                )

                snoCount = start

                Prepaid_Operators_List = list(Prepaid_Operators_queryset)
                
                transction_api_queryset=TransactionAPI.objects(transactionType="Prepaid",status=1).only("id","apiName").order_by("-id")
                transctionsApiList = list(transction_api_queryset)

                pagination = Pagination(prepaidOperatorsPage=prepaidOperatorsPage, total=total_count, per_page=per_page, page_parameter ="prepaidOperatorsPage", alignment="right", record_name="prepaidOperators")

            # Prepaid_Operators_queryset = PrepaidOperators.objects(status__in=[0,1])
            # if search_element:
            #     Prepaid_Operators_queryset = Prepaid_Operators_queryset.filter(Q(name__icontains=search_element))

            # print("Prepaid_Operators_queryset",Prepaid_Operators_queryset)
            # # Get the current page from the query parameters
            # page = request.args.get(get_page_parameter(), type=int, default=1)

            # per_page = 20  # Number of items per page

            # # Query the database for the current page's data
            # total_count = Prepaid_Operators_queryset.count()

            # start = (page - 1) * per_page

            # end = min(start + per_page, total_count)

            # total_circles = Prepaid_Operators_queryset[start:end]
            
            # snoCount = start
            # for each_circle in total_circles:
            #     snoCount +=1
                
                
            #     sites_dict = {
            #     "id": str(each_circle.id),
            #     "name":each_circle.name,
            #     "operatorCode":each_circle.operatorCode,
            #     "prepaidPgId":str(each_circle.prepaidPgId.id),
            #     "prepaidGateWayName":each_circle.prepaidPgId.apiName,
            #     "status":each_circle.status,
            #     "createdOn":each_circle.createdOn.strftime('%Y-%m-%d %H:%M:%S'),
            #     }
                
            #     sites_dict["snoCount"]=snoCount
            #     if each_circle.status == 1:
            #         sites_dict["actionText"]="Active"
            #     else:
            #         sites_dict["actionText"]="Deactive"
            #     Prepaid_Operators_List.append(sites_dict)
            # pagination = Pagination(page=page, total=total_count, per_page=per_page, alignment="right")
            # transction_api_queryset=TransactionAPI.objects(transactionType="Prepaid",status=1).order_by("-id")
           
            # for each_tranction_api in transction_api_queryset:
            #     trans_dict={
            #         "id":str(each_tranction_api.id),
            #         "apiName":each_tranction_api.apiName
            #     }
            #     transctionsApiList.append(trans_dict)
                

            return render_template("super_admin_templates/Prepaid_Operators.html",
                domain=domain,
                pagination=pagination,
                Prepaid_Operators_List=Prepaid_Operators_List,
                redirectval=redirectval,
                search_element=search_element,
                snoCount = snoCount,
                form = form,
                prepaidOperatorsPage=prepaidOperatorsPage,
                transctionsApiList=transctionsApiList
                )
            
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch Prepaid Operators details!!"
            return render_template("super_admin_templates/Prepaid_Operators.html", 
                error=error,
                domain=domain,
                pagination=pagination,
                Prepaid_Operators_List=Prepaid_Operators_List,
                redirectval=redirectval,
                search_element=search_element,
                snoCount = snoCount,
                form = form,
                prepaidOperatorsPage=prepaidOperatorsPage,
                transctionsApiList=transctionsApiList,
                )
    else:
        flash("The staff member does not have permission to view Prepaid operation.", "danger")
        return redirect(url_for("admin.dashboard"))


@Prepaid_Operators.route("/status_Prepaid_Operators",methods=["POST","GET"])
@adminid_access_token_required
def status_Prepaid_Operators():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")

    latitude = request.args.get("latitude", "")
    longitude = request.args.get("longitude", "")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    userAgent=""
    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]

    prepaidOperatorsPage = request.args.get("prepaidOperatorsPage")
    search_element = request.args.get("search_element", "").strip()


    permissionsList = check_permissions(session.get("adminId"),"prepaidOperationPermission")
    if "edit" in permissionsList:
        prepaid_id = request.args.get("prepaid_id","")
        print(prepaid_id,"((((((((((((((((((()))))))))))))))))))")
        if prepaid_id:
            try:
                Prepaid_Operators_queryset = PrepaidOperators.objects(id=prepaid_id,status__nin=[2]).first()
                existing_record = Prepaid_Operators_queryset.to_json()    
                if Prepaid_Operators_queryset:
                    if Prepaid_Operators_queryset.status == 0:
                        Prepaid_Operators_queryset.update(status=1)
                        flash("prepaid operators activated successfully!")
                        message=Prepaid_Operators_queryset.adminId.userName+" "+Prepaid_Operators_queryset.name+" prepaid operators activated successfully!"
                    elif Prepaid_Operators_queryset.status == 1:
                        Prepaid_Operators_queryset.update(status=0)
                        flash("prepaid operators deactivated successfully!")
                        message=Prepaid_Operators_queryset.adminId.userName+" "+Prepaid_Operators_queryset.name+" prepaid operators deactivated successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"status_Prepaid_Operators","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                    return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",search_element=search_element,prepaidOperatorsPage=prepaidOperatorsPage))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",search_element=search_element,prepaidOperatorsPage=prepaidOperatorsPage))
            except Exception as e:
                flash("Unable to Update prepaid operators Status!!!")
                app.logger.error(traceback.format_exc())
                return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",search_element=search_element,prepaidOperatorsPage=prepaidOperatorsPage))
        else:
            flash("Required fields are missing!")
            return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",search_element=search_element,prepaidOperatorsPage=prepaidOperatorsPage))
    else:
        flash("The staff member does not have permission to update Prepaid operations status.", "danger")
        return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",search_element=search_element,prepaidOperatorsPage=prepaidOperatorsPage))


@Prepaid_Operators.route("/delete_Prepaid_Operators",methods=["GET","POST"])
@adminid_access_token_required
def delete_Prepaid_Operators():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")

        existing_record=""
        
        adminId=session.get("adminId")
  
        csrf_token = request.form.get("csrf_token")
        print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
        latitude = request.args.get("latitude", "")
        longitude = request.args.get("longitude", "")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        userAgent=""
        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]
        search_element = ""
        prepaidOperatorsPage = 1

        permissionsList = check_permissions(session.get("adminId"),"prepaidOperationPermission")
        if "delete" in permissionsList:
            if request.method == "GET":
                prepaid_id = request.args.get("prepaid_id","")
                prepaidOperatorsPage = request.args.get(get_page_parameter("prepaidOperatorsPage"), type=int, default=1)
                search_element = request.args.get("search_element","")
                Prepaid_Operators_queryset = PrepaidOperators.objects(id=prepaid_id,status__in=[0,1]).first()
                existing_record = Prepaid_Operators_queryset.to_json()
                Prepaid_Operators_queryset.update(status=2)
                flash("prepaid operator  deleted successfully!")
                message=Prepaid_Operators_queryset.adminId.userName+" "+Prepaid_Operators_queryset.name+" prepaid operations deleted successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_Prepaid_Operators","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators",prepaidOperatorsPage=prepaidOperatorsPage, search_element = search_element))
        else:
            flash("The staff member does not have permission to delete Prepaid operations.", "danger")
            return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators", prepaidOperatorsPage=prepaidOperatorsPage, search_element = search_element))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete prepaid operators!!")
        return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators", prepaidOperatorsPage=prepaidOperatorsPage, search_element = search_element))



@Prepaid_Operators.route("/update_Prepaid_Operators",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_Prepaid_Operators():
    data_status={"responseStatus":0,"result":""}
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId") 
    
    csrf_token = request.form.get("csrf_token")
    print(csrf_token,"((((((((((((((csrf_token))))))))))))))") 
    latitude = request.form.get("latitude", "")
    longitude = request.form.get("longitude", "")
    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"),"prepaidOperationPermission")
    if "edit" in permissionsList:
        if request.method == "POST":
            prepaid_id = request.args.get("prepaid_id","")
            name = request.form.get("name","")
            operatorCode = request.form.get("operatorCode","")
            prepaidPgId = request.form.get("prepaidPgId","")
            image = request.files.get("image","")
            jsonData = request.form.to_dict(flat=True)

            form = AddPrepaidOperators(request.form,current_id=prepaid_id)


            print("((((((((((((((((((prepaidPgId))))))))))))))))))",prepaidPgId)
            if form.validate_on_submit():

                if name and operatorCode and prepaidPgId:
                    try:
                        print("((((((((((((((((((prepaidPgId))))))))))))))))))",prepaidPgId)
                        Prepaid_Operators_queryset = PrepaidOperators.objects(id=prepaid_id,status__in=[0,1]).first()
                        message=Prepaid_Operators_queryset.adminId.userName+" "+name+"  prepaid operators updated successfully!"
                        requestData=[Prepaid_Operators_queryset]
                        updatedrequestData=[jsonData]
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_Prepaid_Operators","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 

                        if Prepaid_Operators_queryset:
                            print("((((((((((((((((((Prepaid_Operators_queryset))))))))))))))))))",Prepaid_Operators_queryset)
                            Prepaid_Operators_queryset.update(
                                name = name,
                                operatorCode = operatorCode,
                                prepaidPgId = ObjectId(prepaidPgId),
                                )
                            
                            if image:
                            
                                if not os.path.exists(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/")):
                                    os.makedirs(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/"))
                                save_file = image.save(os.path.join(app.config['SITE_ROOT'], "media/prepaidOperators/"+prepaid_id+".png"))
                                Prepaid_Operators_queryset.update(image="media/prepaidOperators/"+prepaid_id+".png")

                            flash("prepaid operators Updated successfully!")
                            data_status["responseStatus"]=1
                            return data_status
                        else:
                            flash("Invaild id!!")
                            data_status["responseStatus"]=4
                            return data_status

                    except Exception as e:
                        flash("Unable to Update prepaid operators!!!")
                        app.logger.error(traceback.format_exc())
                        data_status['responseStatus']=4
                        return data_status
                    # if not is_valid_alphanumeric(name):
                    #     flash("Name must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                    #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

                    # if not is_valid_alphanumeric(operatorCode):
                    #     flash("Operator Code must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
                    #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))

                else:
                    data_status["responseStatus"]=2
                    data_status["result"]="Required fields are missing."
                    return data_status
                

            else:
                data_status['result']=form.errors
                return data_status
            #     if name and operatorCode and prepaidPgId:

            #         # if not is_valid_alphanumeric(name):
            #         #     flash("Name must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
            #         #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators")) 

            #         # if not is_valid_alphanumeric(operatorCode):
            #         #     flash("Operator Code must contain only alphanumeric characters, spaces, and specific special characters:@#$()+_-/")
            #         #     return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))

            #         print("((((((((((((((((((prepaidPgId))))))))))))))))))",prepaidPgId)
            #         Prepaid_Operators_queryset = PrepaidOperators.objects(id=prepaid_id,status__in=[0,1]).first()
            #         message=Prepaid_Operators_queryset.adminId.userName+" "+name+"  prepaid operators updated successfully!"
            #         requestData=[Prepaid_Operators_queryset]
            #         updatedrequestData=[jsonData]
            #         save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_Prepaid_Operators","update",actionDate,client_ip,browser,message,requestData,updatedrequestData) 

            #         if Prepaid_Operators_queryset:
            #             print("((((((((((((((((((Prepaid_Operators_queryset))))))))))))))))))",Prepaid_Operators_queryset)
            #             Prepaid_Operators_queryset.update(
            #                 name = name,
            #                 operatorCode = operatorCode,
            #                 prepaidPgId = ObjectId(prepaidPgId),
            #                 )
                        
            #             flash("prepaid operators Updated successfully!")
            #             return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
            #         else:
            #             flash("Invaild id!!")
            #             return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
            #     else:
            #         flash("Required fields are missing!!")
            #         return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
        else:
            return redirect(url_for("Prepaid_Operators.get_Prepaid_Operators"))
        
    else:
        flash("The staff member does not have permission to update Prepaid operators.", "danger")
        data_status['responseStatus']=4
        return data_status


