from django.db import models

# Create your models here.


class Student(models.Model):
    """Model for student data"""
    nisn = models.CharField(max_length=20, unique=True, verbose_name="NISN")
    nama = models.CharField(max_length=100, verbose_name="Nama Lengkap")
    kelas = models.CharField(max_length=20, verbose_name="Kelas")
    jurusan = models.CharField(max_length=100, blank=True, null=True, verbose_name="Jurusan")
    sudah_memilih = models.BooleanField(default=False, verbose_name="Sudah Memilih")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Tanggal Dibuat")

    class Meta:
        verbose_name = "Siswa"
        verbose_name_plural = "Daftar Siswa"
        ordering = ['-created_at']

    def __str__(self):
        return f"{self.nisn} - {self.nama}"


class Candidate(models.Model):
    """Model for election candidate/OSIM candidate"""
    nama = models.CharField(max_length=100, verbose_name="Nama Kandidat")
    foto = models.ImageField(upload_to='candidates/', verbose_name="Foto")
    visi = models.TextField(verbose_name="Visi")
    misi = models.TextField(verbose_name="Misi")
    jumlah_suara = models.PositiveIntegerField(default=0, verbose_name="Jumlah Suara")
    is_active = models.BooleanField(default=True, verbose_name="Aktif")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="Tanggal Dibuat")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="Terakhir Diperbarui")

    class Meta:
        verbose_name = "Kandidat"
        verbose_name_plural = "Daftar Kandidat"
        ordering = ['-jumlah_suara', 'nama']

    def __str__(self):
        return self.nama


class Vote(models.Model):
    """Model to record votes"""
    student = models.OneToOneField(Student, on_delete=models.CASCADE, verbose_name="Siswa")
    candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE, verbose_name="Kandidat")
    timestamp = models.DateTimeField(auto_now_add=True, verbose_name="Waktu Voting")

    class Meta:
        verbose_name = "Vote"
        verbose_name_plural = "Daftar Vote"

    def __str__(self):
        return f"{self.student.nama} -> {self.candidate.nama}"