from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from job.models import Job
from applications.models import Application
from notifications.models import Notification


@receiver(post_save, sender=Job)
def create_job_posted_notification(sender, instance, created, **kwargs):
    """
    Signal to create a notification when a new job is posted.
    Notifies all admin users.
    """
    if created:
        # Get all admin users (staff and superuser)
        admin_users = User.objects.filter(is_staff=True, is_superuser=True)
        
        for admin in admin_users:
            Notification.objects.create(
                recipient=admin,
                notification_type='job_posted',
                title=f"New Job Posted: {instance.title}",
                message=f"A new job '{instance.title}' at {instance.CompanyName} has been posted.",
                job_id=instance.id
            )


@receiver(post_save, sender=Application)
def create_application_notification(sender, instance, created, **kwargs):
    """
    Signal to create a notification when a new application is submitted.
    Notifies all admin users.
    """
    if created:
        # Get all admin users (staff and superuser)
        admin_users = User.objects.filter(is_staff=True, is_superuser=True)
        
        applicant_name = instance.user.get_full_name() or instance.user.username
        
        for admin in admin_users:
            Notification.objects.create(
                recipient=admin,
                notification_type='job_application',
                title=f"New Application for {instance.job.title}",
                message=f"{applicant_name} has applied for the position of {instance.job.title} at {instance.job.CompanyName}.",
                job_id=instance.job.id,
                application_id=instance.id
            )
