# Generated by Codex on 2026-02-26

from django.db import migrations


def _normalize_status(raw_value: str):
    raw = (raw_value or "").strip()
    lowered = raw.lower()
    if not raw:
        return "idle", ""
    if lowered.startswith("success") or lowered in {"ok", "done", "completed"}:
        return "success", ""
    if lowered.startswith("running") or lowered in {"in-progress", "in progress"}:
        return "running", ""
    if lowered.startswith("failed") or lowered.startswith("error"):
        detail = raw.split(":", 1)[1].strip() if ":" in raw else raw
        return "failed", detail
    if lowered in {"idle", "not run", "not-run", "pending"}:
        return "idle", ""
    return "failed", raw


def forwards_normalize_backup_status(apps, schema_editor):
    BackupConfiguration = apps.get_model("app", "BackupConfiguration")
    db_alias = schema_editor.connection.alias
    for config in BackupConfiguration.objects.using(db_alias).all():
        normalized_status, detail = _normalize_status(
            getattr(config, "last_manual_backup_status", "") or ""
        )
        if normalized_status == config.last_manual_backup_status and (
            not detail or detail == (config.last_manual_backup_message or "").strip()
        ):
            continue
        config.last_manual_backup_status = normalized_status
        if detail and not (config.last_manual_backup_message or "").strip():
            config.last_manual_backup_message = detail
        config.save(
            update_fields=["last_manual_backup_status", "last_manual_backup_message"]
        )


class Migration(migrations.Migration):
    dependencies = [
        ("app", "0065_remove_backupconfiguration_schedule_and_more"),
    ]

    operations = [
        migrations.RunPython(
            forwards_normalize_backup_status,
            migrations.RunPython.noop,
        ),
    ]
