from __future__ import unicode_literals
from uuid import uuid4

from django.db import models
from audit_log.models.managers import AuditLog


class Participant(models.Model):
    """
    This model stores participant profile information,
    stores participant consent information
    and verifies email for consent process
    """
    uuid = models.UUIDField(max_length=32, default=uuid4, unique=True)
    first_name = models.CharField(max_length=32)
    last_name = models.CharField(max_length=32)
    email = models.EmailField(null=True, blank=True)
    dob = models.DateField(null=True, blank=True)
    reset_code = models.CharField(max_length=16, null=True)
    join_date = models.DateTimeField(auto_now_add=True)
    email_verified = models.BooleanField(default=False)
    email_verification_date = models.DateTimeField(null=True)
    consent_doc_emailed = models.BooleanField(default=False)
    is_test = models.BooleanField(default=False)
    test_email_regex = models.CharField(max_length=128, null=True)
    created_on = models.DateTimeField(auto_now_add=True)
    modified_on = models.DateTimeField(auto_now=True)
    reset_code_created_date = models.DateTimeField(null=True)
    email_verification_code = models.CharField(max_length=100, blank=True, null=True)
    gcm_token = models.CharField(max_length=256, null=True)
    push_token = models.CharField(max_length=256, null=True)
    enable_notifications = models.BooleanField(default=True)
    survey_notification_time = models.DateTimeField(blank=True, null=True)
    timezone = models.CharField(max_length=100, blank=True, null=True)
    is_participant = models.BooleanField(default=True)
    app_os = models.CharField(max_length=40, blank=True, null=True)
    werf_url = models.TextField(blank=True,null=True)
    audit_log = AuditLog()

    def __unicode__(self):
        return self.uuid.hex



class ParticipantStudyConsent(models.Model):
    """
    Participant additional information like signature of participant,
    its guardian, opted out detail
    """
    participant = models.ForeignKey(Participant, related_name='consents')
    status = models.BooleanField(default=False)
    opt_out = models.BooleanField(default=False)
    opt_out_date = models.DateField(null=True, blank=True)
    opt_out_reason = models.TextField(null=True, blank=True)
    signature = models.TextField()
    guardian_first_name = models.CharField(max_length=64, null=True, blank=True)
    guardian_last_name = models.CharField(max_length=64, null=True, blank=True)
    guardian_email = models.CharField(max_length=255, null=True, blank=True)
    guardian_signature = models.TextField(null=True, blank=True)
    created_on = models.DateTimeField(auto_now_add=True)
    modified_on = models.DateTimeField(auto_now=True)
    audit_log = AuditLog()

class ParticipantNotificationsSent(models.Model):
    participant = models.ForeignKey(Participant)
    notification = models.CharField(max_length=100)
    date = models.DateField(auto_now_add=True)
    created_on = models.DateTimeField(auto_now_add=True)
    audit_log = AuditLog()

class ParticipantAuth(models.Model):
    
    class Meta:
        db_table = 'participant_webauth'

    participant = models.ForeignKey(Participant)
    auth_code = models.CharField(max_length=8)
    auth_code_expire = models.DateTimeField()
    audit_log = AuditLog()