# users/signals.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import CustomUser
from django.core.mail import send_mail
import random

@receiver(post_save, sender=CustomUser)
def generate_referral_code(sender, instance, created, **kwargs):
    if created and not instance.referral_code:
        instance.referral_code = f"VRL{instance.id:05d}"
        instance.save()

from notifications.models import NotificationType, UserNotificationPreference
from django.conf import settings
from django.template.loader import render_to_string

from datetime import datetime


@receiver(post_save, sender=CustomUser)
def post_user_registration(sender, instance, created, **kwargs):
    if created:
        changed = False
        # Generate referral code
        if not instance.referral_code:
            instance.referral_code = f"VRL{instance.id:05d}"; changed = True

        # Generate 6-digit login PIN
        if not instance.login_pin:
            pin = f"{random.randint(100000, 999999)}"
            instance.login_pin = pin; changed = True


            if instance.email:
                context = {
                    'user': instance,
                    'pin': pin,
                    'year': datetime.now().year,
                }
                message = render_to_string('email/welcome_email.html', context)
                send_mail(
                    subject="Welcome to Viral Pe – Your Login PIN Inside",
                    message="",
                    from_email=settings.DEFAULT_FROM_EMAIL,
                    recipient_list=[instance.email],
                    html_message=message,  # ✅ important
                    fail_silently=False,
                )

        if changed:
            instance.save(update_fields=["referral_code", "login_pin"])
        # instance.save()

        # ✅ NEW: Create default notification preferences
        active_types = NotificationType.objects.filter(is_active=True)
        preferences = [
            UserNotificationPreference(
                user=instance,
                notification_type=ntype,
                inapp=ntype.enabled_inapp,
                email=ntype.enabled_email,
                sms=ntype.enabled_sms,
                whatsapp=ntype.enabled_whatsapp,
            )
            for ntype in active_types
        ]
        UserNotificationPreference.objects.bulk_create(preferences, ignore_conflicts=True)
