# results/signals.py
from django.db.models.signals import post_delete, pre_save
from django.dispatch import receiver
from .models import Result

@receiver(post_delete, sender=Result)
def delete_sample_image_file_on_row_delete(sender, instance, **kwargs):
    """
    When a Result row is deleted (including via CASCADE from CustomerDevice),
    delete the associated file from storage.
    """
    f = getattr(instance, "sample_image", None)
    if f and f.name:
        f.delete(save=False)

@receiver(pre_save, sender=Result)
def delete_old_sample_image_file_on_change(sender, instance, **kwargs):
    """
    If sample_image is being replaced on update, delete the old file.
    """
    if not instance.pk:
        return
    try:
        old = Result.objects.get(pk=instance.pk)
    except Result.DoesNotExist:
        return
    old_f = getattr(old, "sample_image", None)
    new_f = getattr(instance, "sample_image", None)
    if old_f and old_f.name and old_f != new_f:
        old_f.delete(save=False)
