from django.core.management.base import BaseCommand
from django.utils import timezone
from core.models import CustomUser, Core_Settings, ScheduledMessage, SMS_Template
from core.views import send_bulk_sms
import http.client
import json

def personalize_text(text, user_name=None, cafe_name=None):
    """جایگزینی [name] و [cafe_name] در متن پیام"""
    if not text:
        return ""
    # جایگزینی name
    if user_name:
        text = text.replace("[name]", user_name)
    else:
        text = text.replace("[name]", "")
    # جایگزینی cafe_name
    if cafe_name:
        text = text.replace("[cafe_name]", cafe_name)
    else:
        text = text.replace("[cafe_name]", "")
    return text

class Command(BaseCommand):
    help = 'ارسال پیامک‌های تولد و پیام‌های زمان‌بندی شده با جایگزینی placeholders'

    def handle(self, *args, **kwargs):
        now = timezone.now()
        today_month = now.month
        today_day = now.day

        self.stdout.write("در حال بررسی پیام‌های زمان‌بندی شده و تولد...")

        # ==========================================
        # بخش ۱: پیامک‌های تولد خودکار
        # ==========================================
        active_settings = Core_Settings.objects.filter(auto_birthday_sms=True).select_related('cofe_owner')
        
        for setting in active_settings:
            cafe = setting.cofe_owner
            if not cafe:
                continue
            
            template_text = setting.birthday_sms_template
            if not template_text:
                continue
            
            birthday_users = CustomUser.objects.filter(
                cofe_owner=cafe,
                is_club_member=True,
                birth_date__month=today_month,
                birth_date__day=today_day
            )

            if not birthday_users.exists():
                continue
                
            sms_config = SMS_Template.objects.filter(cofe_owner=cafe).first()
            api_key = sms_config.sms_api_key if sms_config else None
            line_number = sms_config.sms_line_number if sms_config else None
            
            if not api_key or not line_number:
                self.stdout.write(self.style.WARNING(f"کافه {cafe.name}: تنظیمات پیامک کامل نیست."))
                continue

            for user in birthday_users:
                final_text = personalize_text(template_text, user.first_name, cafe.name)
                send_bulk_sms(api_key, line_number, [user.phone], final_text)
                self.stdout.write(self.style.SUCCESS(f"تولد: پیام به {user.phone} (کافه {cafe.name}) ارسال شد."))

        # ==========================================
        # بخش ۲: پیام‌های زمان‌بندی شده
        # ==========================================
        pending_messages = ScheduledMessage.objects.filter(
            is_sent=False,
            scheduled_time__lte=now
        ).select_related('cafe', 'target_member')

        for msg in pending_messages:
            cafe = msg.cafe
            sms_config = SMS_Template.objects.filter(cofe_owner=cafe).first()
            api_key = sms_config.sms_api_key if sms_config else None
            line_number = sms_config.sms_line_number if sms_config else None
            
            if not api_key or not line_number:
                self.stdout.write(self.style.WARNING(f"کافه {cafe.name}: تنظیمات پیامک برای ارسال زمانبندی شده {msg.id} کامل نیست."))
                continue

            # لیست گیرندگان با متن شخصی‌سازی شده
            recipients = []  # لیستی از تاپل (شماره, متن شخصی‌سازی شده)

            if msg.target_type == 'single_member' and msg.target_member:
                user = msg.target_member
                personalized = personalize_text(msg.message_text, user.first_name, cafe.name)
                recipients.append((user.phone, personalized))

            elif msg.target_type == 'custom_number' and msg.target_custom_phone:
                personalized = personalize_text(msg.message_text, None, cafe.name)
                recipients.append((msg.target_custom_phone, personalized))

            elif msg.target_type == 'vip':
                vip_users = CustomUser.objects.filter(cofe_owner=cafe, visit_count__gte=5)
                for user in vip_users:
                    if user.phone and len(user.phone) == 11:
                        personalized = personalize_text(msg.message_text, user.first_name, cafe.name)
                        recipients.append((user.phone, personalized))

            else:  # target_type == 'all' یا هر مقدار دیگری
                all_users = CustomUser.objects.filter(cofe_owner=cafe)
                for user in all_users:
                    if user.phone and len(user.phone) == 11:
                        personalized = personalize_text(msg.message_text, user.first_name, cafe.name)
                        recipients.append((user.phone, personalized))

            if not recipients:
                self.stdout.write(self.style.WARNING(f"زمانبندی: مخاطبی برای پیام {msg.id} (کافه {cafe.name}) یافت نشد."))
                msg.is_sent = True
                msg.save()
                continue

            # ارسال تکی برای هر گیرنده (برای رعایت شخصی‌سازی)
            success_count = 0
            for phone, text in recipients:
                response = send_bulk_sms(api_key, line_number, [phone], text)
                if response.get("status") == 1:
                    success_count += 1
                else:
                    self.stdout.write(self.style.ERROR(f"خطا در ارسال به {phone}: {response.get('message', 'ناشناخته')}"))
            
            self.stdout.write(self.style.SUCCESS(f"زمانبندی: از {len(recipients)} پیام، {success_count} با موفقیت ارسال شد (کافه {cafe.name})"))
            
            # علامت زدن پیام به عنوان ارسال شده حتی اگر بعضی ناموفق باشند (می‌توانید منطق دیگر هم داشته باشید)
            msg.is_sent = True
            msg.save()

        self.stdout.write("بررسی به پایان رسید.")