from django.db import models
from django.contrib.auth.models import User
import os


class Post(models.Model):
    post_name = models.CharField(unique=True, max_length=255)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return self.post_name


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    roll_number = models.CharField(max_length=255, null=False, default=None)
    is_voter = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    voter_vote_flag = models.BooleanField(default=False)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_at']
    

def get_media_path(model, filename):
    class_name = model.__class__.__name__
    code = str(model.id)
    # here you can change the name
    filename = filename # or another thing
    return os.path.join(class_name, code, filename)


class CandidateProfile(models.Model):
    candidate_full_name = models.CharField(max_length=255, null=True)
    candidate_photo = models.ImageField(upload_to=get_media_path, null=True)
    election_year = models.CharField(max_length=255, null=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_at']

    def __str__(self):
        return self.candidate_full_name


class Voter(models.Model):
    voter_email= models.CharField(unique=True, max_length=255, null=True)
    voter_password = models.CharField(unique=True, max_length=255, null=True, blank=True)
    voter_vote_flag = models.BooleanField(default=False)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return self.voter_email
    

class CandidatePost(models.Model):
    candidate_profile = models.ForeignKey(CandidateProfile, on_delete=models.SET_NULL, null=True)
    post = models.ManyToManyField(Post, max_length=255)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']

    def __str__(self):
        return self.post


class Vote(models.Model):
    candidate_post = models.ForeignKey(CandidatePost, on_delete=models.SET_NULL, null=True)
    voter = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['created_at']


