import django.db.models.deletion
from django.db import migrations, models


def map_primary_departments(apps, schema_editor):
    Employee = apps.get_model("hr", "Employee")
    Department = apps.get_model("companies", "Department")
    departments = {d.name.strip().casefold(): d for d in Department.objects.all()}
    for employee in Employee.objects.exclude(department=""):
        department = departments.get(employee.department.strip().casefold())
        if department:
            employee.primary_department_id = department.id
            employee.save(update_fields=["primary_department"])


class Migration(migrations.Migration):
    dependencies = [
        ("companies", "0003_position"),
        ("hr", "0007_businesstrip_leaverequest"),
    ]
    operations = [
        migrations.AddField(
            model_name="employee", name="primary_department",
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="primary_employees", to="companies.department"),
        ),
        migrations.RunPython(map_primary_departments, migrations.RunPython.noop),
    ]
