"""
Миграция для изменения модели ObjectMark:
- Удаление всех существующих отметок
- Удаление поля source
- Добавление поля tech_analyze
"""

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


def delete_all_marks(apps, schema_editor):
    """Удаляем все существующие отметки перед изменением структуры."""
    ObjectMark = apps.get_model('mainapp', 'ObjectMark')
    count = ObjectMark.objects.count()
    ObjectMark.objects.all().delete()
    print(f"Удалено {count} отметок ObjectMark")


def noop(apps, schema_editor):
    """Обратная операция - ничего не делаем."""
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('mainapp', '0021_add_source_request_fields'),
    ]

    operations = [
        # Сначала удаляем все отметки
        migrations.RunPython(delete_all_marks, noop),
        
        # Удаляем старое поле source
        migrations.RemoveField(
            model_name='objectmark',
            name='source',
        ),
        
        # Добавляем новое поле tech_analyze
        migrations.AddField(
            model_name='objectmark',
            name='tech_analyze',
            field=models.ForeignKey(
                help_text='Связанный технический анализ',
                on_delete=django.db.models.deletion.CASCADE,
                related_name='marks',
                to='mainapp.techanalyze',
                verbose_name='Тех. анализ',
            ),
            preserve_default=False,
        ),
        
        # Обновляем метаданные модели
        migrations.AlterModelOptions(
            name='objectmark',
            options={
                'ordering': ['-timestamp'],
                'verbose_name': 'Отметка сигнала',
                'verbose_name_plural': 'Отметки сигналов'
            },
        ),
        
        # Добавляем индекс для оптимизации запросов
        migrations.AddIndex(
            model_name='objectmark',
            index=models.Index(
                fields=['tech_analyze', '-timestamp'],
                name='mainapp_obj_tech_an_idx'
            ),
        ),
    ]
