from django.db.models import Count

from jobs.models import Job


def apply_open_jobs_count(companies):
    """Attach open_jobs_count from active jobs matched by company_slug."""
    company_list = list(companies)
    if not company_list:
        return company_list

    slugs = [company.slug for company in company_list]
    counts = {
        row['company_slug']: row['total']
        for row in Job.objects.filter(is_active=True, company_slug__in=slugs)
        .values('company_slug')
        .annotate(total=Count('id'))
    }
    for company in company_list:
        company.open_jobs_count = counts.get(company.slug, 0)
    return company_list
