
from .models import WhatsAppMessage
from django.utils import timezone
from datetime import datetime
from userauth.models import MessageWhatsappTemplate
import logging

logger = logging.getLogger(__name__)

def add_whatsapp_to_queue(phone, message, priority=2, sender_module='unknown', 
                         reference_id=None, scheduled_at=None):
    """
    اضافه کردن پیام به صف (جایگزین تابع قدیمی شما)
    
    Args:
        phone: شماره تلفن
        message: متن پیام  
        priority: اولویت (1-4)
        sender_module: نام بخش که پیام را می‌فرستد
        reference_id: شناسه مرجع (مثل order_id)
        scheduled_at: زمان‌بندی ارسال (اختیاری)
    
    Returns:
        WhatsAppMessage instance
    """
    if not phone or not message:
        raise ValueError("phone و message الزامی هستند")
    try:
    
        queue_item = WhatsAppMessage.objects.create(
            phone=phone,
            message=message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id,
            scheduled_at=scheduled_at
        )

        return queue_item
    except Exception as e:
        logger.error(f"Failed to send WhatsApp notification: {str(e)}")
        return 0

def add_bulk_whatsapp_to_queue(messages_data, sender_module='bulk'):
    """
    اضافه کردن چندین پیام به صف
    
    Args:
        messages_data: لیست از دیکشنری‌های حاوی اطلاعات پیام
        sender_module: نام بخش فرستنده
    
    Example:
        messages = [
            {'phone': '989123456789', 'message': 'پیام 1', 'priority': 2},
            {'phone': '989123456790', 'message': 'پیام 2', 'priority': 1},
        ]
        add_bulk_whatsapp_to_queue(messages, 'marketing')
    """
    queue_items = []
    for data in messages_data:
        queue_items.append(WhatsAppMessage(
            phone=data['phone'],
            message=data['message'],
            priority=data.get('priority', 2),
            sender_module=sender_module,
            reference_id=data.get('reference_id'),
            scheduled_at=data.get('scheduled_at')
        ))
    
    WhatsAppMessage.objects.bulk_create(queue_items)
    return queue_items

def get_queue_status(sender_module=None):
    """
    دریافت وضعیت صف
    """
    queryset = WhatsAppMessage.objects.all()
    if sender_module:
        queryset = queryset.filter(sender_module=sender_module)
    
    from django.db.models import Count
    stats = queryset.values('status').annotate(count=Count('id'))
    
    result = {'pending': 0, 'processing': 0, 'sent': 0, 'failed': 0, 'total': 0}
    for stat in stats:
        result[stat['status']] = stat['count']
        result['total'] += stat['count']
    
    return result

def get_messages_by_reference(reference_id):
    """
    دریافت پیام‌ها بر اساس reference_id
    """
    return WhatsAppMessage.objects.filter(reference_id=reference_id)

# برای سازگاری با کد قدیمی
def send_whatsapp(phone, message, priority=2, sender_module='unknown', reference_id=None):
    """
    همان تابع قدیمی شما، اما حالا فقط به صف اضافه می‌کند
    """
    return add_whatsapp_to_queue(
        phone=phone,
        message=message,
        priority=priority,
        sender_module=sender_module,
        reference_id=reference_id
    )

def send_wallet_notification(recipient_type, person, amount, wallet_after,phone):
    """Send WhatsApp notification for wallet changes"""
    try:
        if recipient_type == 'patient':
            name = person.get_full_name()
            template_type = 'patient_wallet'
        elif recipient_type == 'doctor':
            name = person.get_full_name()
            template_type = 'doctor_wallet'
        else:
            name = person.get_full_name()
            template_type = 'technician_wallet'

        message_template = MessageWhatsappTemplate.objects.get(message_type=template_type)
        template = Template(message_template.content)

        context_data = {
            f'{recipient_type}_name': name,
            'price': str(amount),
            f'{recipient_type}_wallet': str(wallet_after),
        }

        personalized_message = template.render(Context(context_data))


        msg = add_whatsapp_to_queue(
            phone=settings.MANAGER_PHONE,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )
        msg = add_whatsapp_to_queue(
            phone=phone,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )

    except Exception as e:
        logger.error(f"Failed to send WhatsApp notification: {str(e)}")

def send_wallet_cost_notification(recipient_type, person, amount, wallet_after,phone):
    """Send WhatsApp notification for wallet changes"""
    try:
        name = person.get_full_name()
        if recipient_type == 'patient':
            template_type = 'patient_add_wallet'
        elif recipient_type == 'doctor':
            template_type = 'doctor_add_wallet'
        else:
            template_type = 'technician_add_wallet'

        message_template = MessageWhatsappTemplate.objects.get(message_type=template_type)
        template = Template(message_template.content)

        context_data = {
            f'{recipient_type}_name': name,
            'price': str(amount),
            f'{recipient_type}_wallet': str(wallet_after),
        }

        personalized_message = template.render(Context(context_data))

        msg = add_whatsapp_to_queue(
            phone=settings.MANAGER_PHONE,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )
        msg = add_whatsapp_to_queue(
            phone=phone,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )

    except Exception as e:
        logger.error(f"Failed to send WhatsApp notification: {str(e)}")

def send_create_user_notification(recipient_type, person):
    """Send WhatsApp notification for wallet changes"""
    try:

        print("recipient_type=",recipient_type)
        print("person=",person)
        name = person.get_full_name()
        print("name=",name)
        phone = person.country_code + person.phone_number
        print("phone=",phone)
        if recipient_type == 'patient':
            template_type = 'patient_add_user'
        elif recipient_type == 'doctor':
            template_type = 'doctor_add_user'
        else:
            template_type = 'technician_add_user'

        message_template = MessageWhatsappTemplate.objects.get(message_type=template_type)
        template = Template(message_template.content)

        context_data = {
            f'{recipient_type}_name': name
        }

        personalized_message = template.render(Context(context_data))


        msg = add_whatsapp_to_queue(
            phone=settings.MANAGER_PHONE,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )
        msg = add_whatsapp_to_queue(
            phone=phone,
            message=personalized_message,
            priority=priority,
            sender_module=sender_module,
            reference_id=reference_id
        )


    except Exception as e:
        logger.error(f"Failed to send WhatsApp notification: {str(e)}")