from appservices.common.util import *
from appservices.common.form_schemas import *


mobile_apk_versions = Blueprint("mobile_apk_versions",__name__)

def mobile_apk_versions_details(each_mobileversions):
    mobileversions_Dict = {}
    try:
        mobileversions_Dict = {
        "id": str(each_mobileversions.id),
        "versionNumber": each_mobileversions.versionNumber,
        "downloadLink": each_mobileversions.downloadLink,
        "status":each_mobileversions.status
        }  
        
        if each_mobileversions.siteId:
            mobileversions_Dict["siteId"] = str(each_mobileversions.siteId.id)
            mobileversions_Dict["siteTitle"] = each_mobileversions.siteId.siteTitle
        else:
            mobileversions_Dict["siteId"] = ""
            mobileversions_Dict["siteTitle"] = ""
            
        if each_mobileversions.status == 1:
            mobileversions_Dict["actionText"]="Active"
        else:
            mobileversions_Dict["actionText"]="Deactive"

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return mobileversions_Dict





@mobile_apk_versions.route("/mobile_apk_versions_list", methods=["POST", "GET"])
@adminid_access_token_required
def mobile_apk_versions_list():
    if not session.get("adminId"):
        return redirect("admin_login")


    MobileApkVersionsList = []
    matchultipleAppSitesList = []
    pagination = ""
    snoCount = 0
    page = None
    adminId = session.get("adminId")
    total_count = 0

    permissionsList = check_permissions(adminId, "mobileApkVersionPermission")
    form = MobileApkVersionsFormSearch(request.args)
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo", "MobileApkVersions")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = "MobileApkVersions"

            
            search_element = request.args.get("search_element", "")

            if search_element:
                
                search_element = form.search_element.data.strip()
        
                    

            mobileApkVersionPage = request.args.get(get_page_parameter("mobileApkVersionPage"), type=int, default=1)
            per_page = 20
            start = (mobileApkVersionPage - 1) * per_page

            filters = Q(status__in=[0, 1])
            if form.validate():
                if search_element and search_element.strip():
                    filters &= Q(versionNumber__icontains=search_element.strip())

                total_count = MobileApkVersions.objects(filters).count()

                mobile_versions_queryset = (
                    MobileApkVersions.objects(filters)
                    .only("id", "versionNumber","siteId", "downloadLink", "createdOn", "status")
                    .order_by("-id")
                    .skip(start)
                    .limit(per_page)
                )

                MobileApkVersionsList=list(mobile_versions_queryset)
            else:
                print("form errors",form.errors)
                MobileApkVersionsList=[]

            snoCount = start

            pagination = Pagination(
                mobileApkVersionPage=mobileApkVersionPage,
                total=total_count,
                per_page=per_page,
                page_parameter="mobileApkVersionPage",
                search_element = search_element,
                
                alignment="right",
                record_name="mobileapkversions",
                href=f"?search_element={search_element}&mobileApkVersionPage={{0}}"
            
            )


            matchultiple_app_sites_queryset = MultipleAppSites.objects(status__in=[0,1]).only("id","siteTitle")
            matchultipleAppSitesList = list(matchultiple_app_sites_queryset)

            # for each_site in matchultiple_app_sites_queryset:
            #     matchultipleAppSitesList.append({
            #         "id": str(each_site.id),
            #         "siteTitle": each_site.siteTitle
            #     })

            return render_template("super_admin_templates/mobile_apk_versions_list.html",
                MobileApkVersionsList=MobileApkVersionsList,
                matchultipleAppSitesList=matchultipleAppSitesList,
                pagination=pagination,
                redirectval=redirectval,
                search_element=search_element,
                snoCount=snoCount,
                mobileApkVersionPage=mobileApkVersionPage,
                form=form
            )

        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch mobile apk versions details!!"
            return render_template("super_admin_templates/mobile_apk_versions_list.html",
                error=error,
                MobileApkVersionsList=MobileApkVersionsList,
                matchultipleAppSitesList=matchultipleAppSitesList,
                pagination=pagination,
                redirectval=redirectval,
                search_element=search_element,
                snoCount=snoCount,
                mobileApkVersionPage=mobileApkVersionPage,
                form=form
            )

    else:
        flash("The staff member does not have permission to view mobile apk versions.", "danger")
        return render_template("super_admin_templates/mobile_apk_versions_list.html")




# Add mobile_apk_versions
@mobile_apk_versions.route("/add_mobile_apk_versions", methods=["POST", "GET"])
@adminid_access_token_required
@csrf_protect
def add_mobile_apk_versions():
    data_status = {"responseStatus": 0, "result": ""}
    if not session.get("adminId"):
        data_status["responseStatus"]=4
        return data_status

    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:
        userAgent = request.headers.get('User-Agent')
        loginBrowseData = userAgent.split(";")
        browser = loginBrowseData[0]

    client_ip = request.headers.getlist("X-Forwarded-For")[0] if request.headers.getlist("X-Forwarded-For") else request.remote_addr

    actionDate = datetime.datetime.now()
    permissionsList = check_permissions(adminId, "mobileApkVersionPermission")

    if "add" in permissionsList:
        if request.method == "POST":
            siteId = request.form.get("siteId", "")
            versionNumber = request.form.get("versionNumber", "")
            downloadLink = request.form.get("downloadLink", "")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]
            form=MobileApkVersionsForm()

            if form.validate_on_submit():
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId, status=1).first()
                    if admin_queryset:
                        message = admin_queryset.userName + " Mobile Apk Versions created successfully!"
                        save_admin_logs_data(adminId, None, None, "add_mobile_apk_versions", "create", actionDate, client_ip, browser, message, requestData, updatedrequestData,latitude,longitude)

                    add_mobile_apk_table = MobileApkVersions(
                        adminId=adminId,
                        siteId=siteId,
                        versionNumber=versionNumber,
                        downloadLink=downloadLink,
                        createdOn=datetime.datetime.now(),
                        status=1
                    )
                    save_mobile_apk_versions = add_mobile_apk_table.save()
                    mobileversionsId = str(save_mobile_apk_versions.id)

                    data_status["responseStatus"] = 1
                    flash("Mobile Apk Version added successfully!", "success")
                    return data_status
                
                 
                except Exception as e:
                    data_status["responseStatus"] = 4
                    flash("Unable to save Mobile Apk Versions!", "error")
                    return data_status

            else:
                data_status['result']=form.errors
                return data_status

        else:
            data_status["responseStatus"] = 2
            flash("Required fields are missing!", "error")
           
            return data_status

    else:
        data_status["responseStatus"] = 4
        flash("The staff member does not have permission to create a Mobile Apk Versions.", "danger")
        return data_status
 

@mobile_apk_versions.route("/mobile_apk_versions_status",methods=["POST","GET"])
@adminid_access_token_required
def mobile_apk_versions_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")

    mobileApkVersionPage = request.args.get("mobileApkVersionPage")
    search_element = request.args.get("search_element")
    redirectTo = url_for("mobile_apk_versions.mobile_apk_versions_list",mobileApkVersionPage=mobileApkVersionPage,search_element = search_element)

    form = MobileApkVersionsFormSearch()

    latitude = request.args.get("latitude", "")
    longitude = request.args.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

    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"),"mobileApkVersionPermission")
    if "edit" in permissionsList:
        mobileversionsId = request.args.get("mobileversionsId","")

        if mobileversionsId:
            try:
                message=""
                mobile_versions_queryset = MobileApkVersions.objects(id=mobileversionsId,status__nin=[2]).first()
                existing_record = mobile_versions_queryset.to_json()
                requestData = [existing_record]
                if mobile_versions_queryset:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if mobile_versions_queryset.status == 0:
                        mobile_versions_queryset.update(status=1)
                        flash("Mobile Apk Versions activated successfully!")
                        message=admin_queryset.userName+"  "+mobile_versions_queryset.siteId.siteTitle+" Mobile Apk Versions activated successfully!"
                    elif mobile_versions_queryset.status == 1:
                        mobile_versions_queryset.update(status=0)
                        flash("Mobile Apk Versions deactivated successfully!")
                        message=admin_queryset.userName+"  "+mobile_versions_queryset.siteId.siteTitle+" Mobile Apk Versions deactivated successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"mobile_apk_versions_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                    print(save_admin_log_table,"((((((((((((((((save_admin_log_table))))))))))))))))")
                    return redirect(redirectTo)
                else:
                    flash("Invaild id!!")
                    return redirect(redirectTo)
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect(redirectTo)
        else:
            return redirect(redirectTo)
    else: 
        flash("The staff member does not have permission to update Mobile Apk Versions status.", "danger")
        return redirect(redirectTo)




@mobile_apk_versions.route("/mobile_apk_versions_delete",methods=["GET","POST"])
@adminid_access_token_required
def mobile_apk_versions_delete():
    try:
        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")
        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"),"mobileApkVersionPermission")
        if "delete" in permissionsList:
            if request.method == "GET":
                admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                mobileversionsId = request.args.get("mobileversionsId","")
                mobile_versions_queryset = MobileApkVersions.objects(id=mobileversionsId,status__in=[0,1]).first()
                existing_record = mobile_versions_queryset.to_json()
                requestData = [existing_record]
                mobile_versions_queryset.update(status=2)
                flash("Mobile Apk Versions deleted successfully!")
                message=admin_queryset.userName+" "+mobile_versions_queryset.siteId.siteTitle+" Mobile Apk Versions deleted successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"mobile_apk_versions_delete","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                return redirect(url_for("mobile_apk_versions.mobile_apk_versions_list",redirectTo="MobileApkVersions"))
        else:
            flash("The staff member does not have permission to delete Mobile Apk Versions.", "danger")
            return redirect(url_for("mobile_apk_versions.mobile_apk_versions_list",redirectTo="MobileApkVersions"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Mobile Apk Versions!!")
        return redirect(url_for("mobile_apk_versions.mobile_apk_versions_list",redirectTo="MobileApkVersions"))





@mobile_apk_versions.route("/mobile_apk_versions_update",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def mobile_apk_versions_update():
    data_status = {"responseStatus": 0, "result": ""}
    if not session.get("adminId"):
        flash("Session expired. Please log in again.", "danger")
        data_status["responseStatus"]=4
        return data_status
    adminId=session.get("adminId") 
       
    csrf_token = request.form.get("csrf_token")
    print(csrf_token,"((((((((((((((csrf_token))))))))))))))")

    form=MobileApkVersionsForm()
    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"),"mobileApkVersionPermission")
    if "edit" in permissionsList:
        try:
            mobileversionsId = request.args.get("mobileversionsId","")
            print("HIIII")
            if request.method == "POST":
                siteId = request.form.get("siteId","")
                versionNumber = request.form.get("versionNumber","")
                downloadLink = request.form.get("downloadLink","")

                
                jsonData = request.form.to_dict(flat=True)
            
                if form.validate_on_submit():

                    if siteId:
                        mobile_versions_queryset = MobileApkVersions.objects(id=mobileversionsId,status__in=[0,1]).first()
                        existing_record = mobile_versions_queryset.to_json()
                        message=mobile_versions_queryset.adminId.userName+"  "+mobile_versions_queryset.siteId.siteTitle+" Mobile Apk Versions updated successfully!"
                        requestData=[mobile_versions_queryset]
                        updatedrequestData=[jsonData]
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"mobile_apk_versions_update","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                        if mobile_versions_queryset:
                            mobile_versions_queryset.update(
                                siteId = ObjectId(siteId),
                                versionNumber = versionNumber,
                                downloadLink = downloadLink,
                                )
                            data_status["responseStatus"]=1
                            flash(" Mobile Apk Versions updated successfully!")
                            return data_status
                        else:
                            flash("Invalid ID provided.", "danger")
                            data_status["responseStatus"]=4
                            return data_status
                        

                    else:
                        data_status["responseStatus"] = 2
                        flash("Required fields are missing!!")
                        return data_status
                else: 
                    data_status["result"]=form.errors
                    return data_status
                    
            else:
                flash("Invalid Request.", "danger")
                data_status["responseStatus"]=4
                return data_status
             
        except Exception as e:
                    app.logger.error(traceback.format_exc())
                    data_status["responseStatus"]=0

                    data_status["result"]=form.errors
                    return data_status          

    else:
        data_status["responseStatus"] = 2
        flash("The staff member does not have permission to update Mobile Apk Versions.", "danger")
        return data_status
