from django.db import models
from django.utils.text import slugify
from teacher_management.models import Teacher
from organization.models import BaseTenantModel


class Course(BaseTenantModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, unique=True)
    code = models.CharField(max_length=20, unique=True)
    slug = models.SlugField(max_length=255, unique=True, blank=True)
    credit = models.DecimalField(max_digits=3, decimal_places=2)
    credit_hours = models.DecimalField(max_digits=3, decimal_places=1, default=1.0)
    teachers = models.ManyToManyField(Teacher, through='CourseTeacher')
    department = models.ForeignKey('departments.Department', on_delete=models.CASCADE, null=True, blank=True)
    year = models.ForeignKey('batch_year.BatchYear', on_delete=models.CASCADE, null=True, blank=True)
    semester = models.ForeignKey('semester.Semester', on_delete=models.CASCADE, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['code']
        verbose_name = "Course"
        verbose_name_plural = "Courses"

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(f"{self.code}-{self.name}")
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.code} - {self.name}"

class CourseTeacher(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)

    class Meta:
        unique_together = ('course', 'teacher')
