from django.db.models.signals import pre_save
from django.dispatch import receiver

from MASTERAPP.models import Order
from MASTERAPP.services.order_tracking_service import create_tracking_event

@receiver(pre_save, sender=Order)
def order_status_tracking_handler(sender, instance, **kwargs):

    if not instance.pk:
        return

    try:
        old_order = Order.objects.get(pk=instance.pk)
    except Order.DoesNotExist:
        return

    if old_order.status == instance.status:
        return

    status_titles = {
        "confirmed": "Order Confirmed",
        "processing": "Order Processing",
        "packed": "Order Packed",
        "shipped": "Order Shipped",
        "out_for_delivery": "Out For Delivery",
        "delivered": "Order Delivered",
        "cancelled": "Order Cancelled",
    }

    title = status_titles.get(
        instance.status,
        instance.status.title(),
    )

    create_tracking_event(
        order=instance,
        status=instance.status,
        title=title,
        description=f"Order status updated to {instance.status}.",
    )