from django.db import models


class TimetableEntry(models.Model):
    DAY_CHOICES = [
        (1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'),
        (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'),
    ]
    YEAR_CHOICES = [(1, 'Year 1'), (2, 'Year 2'), (3, 'Year 3')]
    TERM_CHOICES = [('term_1', 'Term 1'), ('term_2', 'Term 2'), ('term_3', 'Term 3')]

    program = models.ForeignKey(
        'admissions.Program', on_delete=models.CASCADE, related_name='timetable_entries'
    )
    course = models.ForeignKey(
        'courses.Course', on_delete=models.SET_NULL, null=True, blank=True,
        related_name='timetable_entries',
        help_text='Link to a course in the curriculum (optional)',
    )
    subject = models.CharField(
        max_length=200, blank=True,
        help_text='Subject name — required if no Course is selected above',
    )
    day = models.PositiveSmallIntegerField(choices=DAY_CHOICES)
    start_time = models.TimeField()
    end_time = models.TimeField()
    venue = models.CharField(max_length=100, blank=True, help_text='e.g. Room 3, Workshop A')
    year = models.PositiveSmallIntegerField(choices=YEAR_CHOICES, default=1)
    term = models.CharField(max_length=10, choices=TERM_CHOICES)
    academic_year = models.CharField(max_length=9, help_text='e.g. 2025/2026')

    class Meta:
        ordering = ['program', 'year', 'day', 'start_time']

    def __str__(self):
        return (
            f"{self.display_name} — {self.get_day_display()} "
            f"{self.start_time.strftime('%H:%M')}-{self.end_time.strftime('%H:%M')} "
            f"({self.program.name})"
        )

    @property
    def display_name(self):
        if self.subject:
            return self.subject
        if self.course:
            return self.course.name
        return 'Untitled'
