from celery import shared_task
import requests
from .models import Orders
from datetime import date, datetime
import os
import logging
from django.utils import timezone
from datetime import timedelta



def delete_all_files(folder_path):
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)

        # Delete only files
        if os.path.isfile(file_path):
            os.remove(file_path)
            logging.info(f"Deleted: {file_path}")
@shared_task
def delete_bills():
    try:
        delete_all_files(r'media/output/pdf')
        delete_all_files(r'media/output/excel')
        logging.info("PDF Bills: Deleted")
    except Exception as e:
        logging.info(f"PDF Bill Deletion Failed: {e}")



@shared_task
def check_and_verify_order_status(order_id):
    """
    Check if the order status is still 'New Order' after 5 minutes.
    If yes, call the verification API.
    """
    try:
        logging.info(f"Checking order {order_id} status...")
        order = Orders.objects.get(order_ID=order_id)

        # Wait until 5 minutes after order creation
        five_minutes_ago = timezone.now() - timedelta(minutes=5)

        # Check if the order is still 'New Order' and older than 5 minutes
        if order.order_status == "New Order" and order.created_date <= five_minutes_ago:
            logging.info(f"Order {order_id} still 'New Order' after 5 mins. Calling verification API...")
            
            try:
                response = requests.post(
                    "https://navya.svpstaging.com/orders/double/verifiy/",
                    data={"order_id": order_id},
                    timeout=10,
                )
                logging.info(f"Verification API response for order {order_id}: {response.status_code} {response.text}")
            except Exception as e:
                logging.error(f"Failed to call verification API for {order_id}: {e}")
        else:
            logging.info(f"Order {order_id} already updated or not older than 5 mins — skipping.")
    except Orders.DoesNotExist:
        logging.error(f"Order {order_id} not found in database.")
    except Exception as e:
        logging.error(f"Error checking order {order_id}: {e}")