from django.utils import timezone

from MASTERAPP.models import (
    OrderTrackingEvent,
)
 


STATUS_CONFIG = {

    "confirmed": {
        "title": "Order Confirmed",
        "description": "Your order has been confirmed successfully.",
    },

    "processing": {
        "title": "Processing Started",
        "description": "Your order is now being processed.",
    },

    "packed": {
        "title": "Order Packed",
        "description": "Your order has been packed.",
    },

    "shipped": {
        "title": "Order Shipped",
        "description": "Your package has been shipped.",
    },

    "out_for_delivery": {
        "title": "Out For Delivery",
        "description": "Your package is out for delivery.",
    },

    "delivered": {
        "title": "Order Delivered",
        "description": "Your order has been delivered successfully.",
    },

    "cancelled": {
        "title": "Order Cancelled",
        "description": "Your order has been cancelled.",
    },

    "returned": {
        "title": "Order Returned",
        "description": "Your order has been returned.",
    },

    "refund_initiated": {
        "title": "Refund Initiated",
        "description": "Your refund process has started.",
    },

    "refund_completed": {
        "title": "Refund Completed",
        "description": "Your refund has been completed.",
    },
}


def create_tracking_event(
    order,
    status,
    location="Main Warehouse",
):

    config = STATUS_CONFIG.get(status)

    if not config:
        return None

    last_event = (
        order.tracking_events.filter(
            status=status,
            is_active=True,
            is_deleted=False,
        )
        .order_by("-event_time")
        .first()
    )

    # Prevent duplicate latest events
    if last_event:
        return last_event

    event = OrderTrackingEvent.objects.create(
        order=order,
        status=status,
        title=config["title"],
        description=config["description"],
        location=location,
        event_time=timezone.now(),
        is_customer_visible=True,
    )

    return event


def handle_order_status_change(
    order,
    new_status,
):

    # =====================================================
    # CREATE TRACKING EVENT
    # =====================================================

    create_tracking_event(
        order=order,
        status=new_status,
    )

    # =====================================================
    # CREATE NOTIFICATION
    # =====================================================

    # config = STATUS_CONFIG.get(new_status)

    # if config:

    #     create_app_notification(
    #         order.user,
    #         config["title"],
    #         config["description"],
    #         "order",
    #     )

    return True