from django.db import models
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
from django.conf import settings


class subcriber(models.Model):
    nom = models.CharField(max_length=120)
    email = models.EmailField(max_length=254)
    conf_num = models.CharField(max_length=15, default="")
    confirmed = models.BooleanField(default=False)
    
    class Meta:
        ordering = ['nom']

    def __str__(self) -> str:
        return self.email + " (" + ("not " if not self.confirmed else "") + "confirmed)"
        

class Newsletter(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    subject = models.CharField(max_length=150)
    message = models.TextField(blank=True)
    file = models.FileField(upload_to='uploaded_newsletters/',  blank=True)

    def __str__(self):
        return self.subject + " " + self.created_at.strftime("%B %d, %Y")
        
    def send(self, request):
        # contents = self.contents.read().decode('utf-8')
        subscribers = subcriber.objects.filter(confirmed=True)
        sg = SendGridAPIClient("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")
        for sub in subscribers:
            message = Mail(
                    from_email=settings.FROM_EMAIL,
                    to_emails=sub.email,
                    subject=self.subject,
                    html_content= (
                        '<br><a href="{}/?email={}&conf_num={}">Unsubscribe</a>.').format(
                            request.build_absolute_uri('/delete/'),
                            sub.email,
                            sub.conf_num))
            sg.send(message)
        
