# Generated by Django 3.2.20 on 2023-11-03 00:20

from django.db import migrations
from projects.models import Project
from core.models import AsyncMigrationStatus
from core.redis import start_job_async_or_sync
import logging


logger = logging.getLogger(__name__)


def _fill_label_config_hash(migration_name, db_alias):
    project_tuples = Project.objects.using(db_alias).all().values_list('id', 'parsed_label_config')
    for project_id, parsed_label_config in project_tuples:
        migration = AsyncMigrationStatus.objects.using(db_alias).create(
            project_id=project_id,
            name=migration_name,
            status=AsyncMigrationStatus.STATUS_STARTED,
        )

        hashed_label_config = hash(str(parsed_label_config))
        Project.objects.using(db_alias).filter(id=project_id).update(label_config_hash=hashed_label_config)

        migration.status = AsyncMigrationStatus.STATUS_FINISHED
        migration.save(using=db_alias)


def fill_label_config_hash(migration_name, db_alias):
    logger.info('Start filling label config hash')
    start_job_async_or_sync(_fill_label_config_hash, migration_name=migration_name, db_alias=db_alias)
    logger.info('Finished filling label config hash')


def forward(apps, schema_editor):
    db_alias = schema_editor.connection.alias
    fill_label_config_hash('0026_auto_20231103_0020', db_alias)


def backwards(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('projects', '0025_project_label_config_hash'),
    ]

    operations = [
        migrations.RunPython(forward, backwards)
    ]
