from celery import shared_task
from time import sleep
import time
from .views import vast_handling
from concurrent.futures import ThreadPoolExecutor
from .models import VastResponse
from .utils import vast_update_requests
from datetime import datetime
import pytz




@shared_task(name="Call VAST")
def call_vast(url,num_requests,params,spot):
    
    print("Reveived Task!......")
    print("Call VAST...!")
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    # Rest of your code here..
    with ThreadPoolExecutor(max_workers=100) as executor:
        futures = [executor.submit(vast_handling, url, headers=headers, params=params,call_num=i,spot=spot) for i in range(1,num_requests+1)]
        response = [future.result() for future in futures]
        print(response)
    


@shared_task(name="update vast")
def update_vast():
    print("Vast Update....")
    from django.db.models import Q
    # Get the current date and time
    current_datetime = datetime.now()

    # Format the date in 'YYYY-MM-DD' format
    report_date = current_datetime.strftime('%Y-%m-%d')

    verify_replies = VastResponse.objects.filter(
        datetime_timestamp__icontains=report_date
        # tracking_start_status=None,
        # tracking_firstquartile_status=None,
        # tracking_midpoint_status=None,
        # tracking_thirdquartile_status=None,
        #
        # impression_sprintserve_status=None,
        # impression_double_click_status=None
        ).filter(
            Q(impression_sprintserve_status=None) | Q(impression_double_click_status=None)
        )
    # Create a ThreadPoolExecutor with max_workers=20
    with ThreadPoolExecutor(max_workers=100) as executor:
        # Submit requests for various URLs
        futures = {
            # for reply in verify_reply:
            #   for url in reply:
            #   vast_update
            executor.submit(vast_update_requests, url,reply): url for reply in verify_replies for url in [
                # reply.tracking_start,
                # reply.tracking_firstquartile,
                # reply.tracking_midpoint,
                # reply.tracking_thirdquartile,
                reply.impression_sprintserve,
                reply.impression_double_click,
                # reply.tracking_complete

            ]
        }