from django.contrib.auth.models import User
from django.db import models
from django.core.validators import FileExtensionValidator
from django.utils.text import slugify
from django.urls import reverse
import uuid

# Create your models here.
class Dataset(models.Model):

        Male = "Male"
        Female = "Female"

        sex_choices = [
            (Male, 'Male'),
            (Female, 'Female'),
            ]
      
        # Hours = "Hours"
        # Days = "Days"
        # Weeks = "Weeks"
        # Months = "Months"
        # Years = "Years"

        # age_choices = [
        #     (Hours, 'Hours'),
        #     (Days, 'Days'),
        #     (Weeks, 'Weeks'),
        #     (Months, 'Months'),
        #     (Years, 'Years'),
        #     ]


        name = models.CharField(max_length=255) #name for dataset
        slug = models.SlugField(unique=True, max_length=200, blank=True)
        manuscript = models.TextField(blank=True, null=True) #link to manuscript
        download = models.TextField(blank=True, null=True) #link to geodata for download
        data = models.FileField(upload_to='data_files', blank = True, null = True)
        #rawData = models.FileField(upload_to='data_files', blank=True, null=True, validators=[FileExtensionValidator(['h5','h5ad'])])
        species = models.CharField(max_length=255, default='') #species
        anatomicalPosition = models.CharField(max_length=100, default='')
        selectedCells = models.CharField(max_length=100, default='')
        dataType = models.CharField(max_length=100, default='')
        age = models.CharField(max_length=255, default='')
        #ageNumber = models.IntegerField(default='1')
        #ageType = models.CharField(max_length=15, choices=age_choices, default='Hours')
        sex = models.CharField(max_length=10, choices=sex_choices, default='Male')
        analyzer = models.CharField(max_length=255, default='') #name for dataset
        principleInvestigator = models.CharField(max_length=100, default='')
        description = models.TextField(blank=True, null=True) #description for item, uses textfield because its longer, blank=true and null=true are there if the user doesnt want a description
        
        hidden = models.BooleanField(default=False)
        subfolder = models.CharField(max_length=255, default='')
        cellTypeImage = models.FileField(upload_to='data_files', blank=True, null=True, validators=[FileExtensionValidator(['png','jpeg','jpg'])])
        created_by = models.ForeignKey(User, related_name='items', on_delete=models.CASCADE) #automatically takes in user name 
        created_at  = models.DateTimeField(auto_now_add=True) #automatically adds date created

        multiImage = models.BooleanField(default=False)
        cellTypeImage2 = models.FileField(upload_to='data_files', blank=True, null=True, validators=[FileExtensionValidator(['png','jpeg','jpg'])])

        def __str__(self):
            return self.name
        def save(self, *args, **kwargs):
            if not self.slug:
                self.slug = slugify(self.name)
            super().save(*args, **kwargs)

        def save(self, *args, **kwargs):
            if not self.slug:
                base_slug = slugify(self.name)
                slug = base_slug
                count = 1
                while Dataset.objects.filter(slug=slug).exists():
                    slug = f"{base_slug}-{uuid.uuid4().hex[:5]}-{count}"
                    count += 1
                self.slug = slug
            super().save(*args, **kwargs)
            

        
class Genesearch(models.Model):
      name = models.CharField(max_length=255)
      def __str__(self):
            return self.name 