from datetime import timedelta
from toolz.itertoolz import unique
from django.urls import reverse
from backoffice.helpers import getEventDateToParisTimeZone
from urllib3 import request
from backoffice.models import *
from tixsell import settings
import stripe 
import json
from web3 import Web3
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def run():
    events = Event.objects.filter(status=1)
    print("=== Nb Event à checker "+str(len(events)))
    for event in events: 
        try:
            print("===Check event %s"%(event.name))
             
            #Check if event is in 60 minutes
            paris_tz = pytz.timezone('Europe/Paris')
            dateToParisTimezone = getEventDateToParisTimeZone(event)
            oneHourBefore = dateToParisTimezone-timedelta(minutes=30)
            
            current_time = timezone.now().astimezone(paris_tz)
            print("=== Check Rappel Event 30 min avant à envoyer - Heure Paris "+str(oneHourBefore)+" avec "+str(current_time))
            if current_time >= dateToParisTimezone:
                print("==On doit envoyer")
                 #Il faut recuperer tous les emails de ceux qui ont des tickets...
                emailTickets = Ticket.objects.filter(refTicketType__refEvent=event,status=1).values_list('refUser__email',flat=True)
                recipients = [{"email": email} for email in unique(emailTickets, key=lambda x: x) if email is not None]
                if recipients:
                    print("===Envoi")
                else:
                    print("===Pas d'email à envoyer")
        except Exception as e:
            print(e)