"""Keep job position counts in sync when application status changes."""
from __future__ import annotations

from django.db.models import F

from jobs.models import Job, JobApplication


def sync_job_positions_on_status_change(application, old_status, new_status):
    hired = JobApplication.Status.HIRED
    if old_status == new_status:
        return

    job_id = application.job_id
    if new_status == hired and old_status != hired:
        Job.objects.filter(pk=job_id).update(positions_filled=F('positions_filled') + 1)
        job = Job.objects.get(pk=job_id)
        if job.positions_filled > job.positions_total:
            Job.objects.filter(pk=job_id).update(positions_filled=job.positions_total)
    elif old_status == hired and new_status != hired:
        Job.objects.filter(pk=job_id, positions_filled__gt=0).update(
            positions_filled=F('positions_filled') - 1
        )
