from django.db import migrations, models
from django.db.models import Count


def backfill_positions_filled(apps, schema_editor):
    Job = apps.get_model('jobs', 'Job')
    JobApplication = apps.get_model('jobs', 'JobApplication')
    hired_counts = (
        JobApplication.objects.filter(status='hired')
        .values('job_id')
        .annotate(count=Count('id'))
    )
    counts_by_job = {row['job_id']: row['count'] for row in hired_counts}
    for job in Job.objects.all():
        filled = counts_by_job.get(job.pk, 0)
        if filled:
            job.positions_filled = min(filled, job.positions_total or 1)
            job.save(update_fields=['positions_filled'])


class Migration(migrations.Migration):

    dependencies = [
        ('jobs', '0016_job_experience_years'),
    ]

    operations = [
        migrations.AddField(
            model_name='job',
            name='positions_filled',
            field=models.PositiveSmallIntegerField(
                default=0,
                help_text='How many positions have been filled (updated when candidates are marked hired).',
            ),
        ),
        migrations.AddField(
            model_name='job',
            name='positions_total',
            field=models.PositiveSmallIntegerField(
                default=1,
                help_text='Number of people being recruited for this role.',
            ),
        ),
        migrations.RunPython(backfill_positions_filled, migrations.RunPython.noop),
    ]
