# Generated by Django 5.2.17 on 2026-08-11 08:35

import django.core.validators
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('operations', '0001_initial'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='LearningProfile',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('student', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='learning_profile', to=settings.AUTH_USER_MODEL, verbose_name='estudante')),
            ],
            options={
                'verbose_name': 'perfil de aprendizagem',
                'verbose_name_plural': 'perfis de aprendizagem',
            },
        ),
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('statement', models.TextField(verbose_name='enunciado')),
                ('difficulty', models.PositiveSmallIntegerField(default=3, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)], verbose_name='dificuldade (1–5)')),
                ('question_type', models.CharField(choices=[('multiple_choice', 'Escolha múltipla'), ('short_answer', 'Resposta curta'), ('true_false', 'Verdadeiro/Falso')], default='multiple_choice', max_length=30, verbose_name='tipo')),
                ('options', models.JSONField(blank=True, default=list, verbose_name='opções')),
                ('correct_answer', models.TextField(verbose_name='resposta correta')),
                ('explanation', models.TextField(blank=True, verbose_name='explicação')),
                ('skills', models.JSONField(blank=True, default=list, verbose_name='competências')),
                ('is_published', models.BooleanField(default=True, verbose_name='publicada')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='operations.course', verbose_name='disciplina')),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_questions', to=settings.AUTH_USER_MODEL, verbose_name='criada por')),
                ('topic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='questions', to='operations.topic', verbose_name='tópico')),
            ],
            options={
                'verbose_name': 'questão',
                'verbose_name_plural': 'questões',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Attempt',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('answer', models.TextField(blank=True, verbose_name='resposta')),
                ('is_correct', models.BooleanField(default=False, verbose_name='correta')),
                ('time_spent', models.PositiveIntegerField(default=0, verbose_name='tempo (segundos)')),
                ('attempt_number', models.PositiveIntegerField(default=1, verbose_name='número da tentativa')),
                ('strategy', models.CharField(blank=True, max_length=100, verbose_name='estratégia')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attempts', to=settings.AUTH_USER_MODEL, verbose_name='estudante')),
                ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attempts', to='learning.question', verbose_name='questão')),
            ],
            options={
                'verbose_name': 'tentativa',
                'verbose_name_plural': 'tentativas',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Recommendation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('reason', models.TextField(blank=True, verbose_name='motivo')),
                ('priority', models.PositiveSmallIntegerField(default=3, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)], verbose_name='prioridade (1 = máxima)')),
                ('status', models.CharField(choices=[('suggested', 'Sugerida'), ('dismissed', 'Ignorada'), ('done', 'Concluída')], default='suggested', max_length=20, verbose_name='estado')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('question', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='recommendations', to='learning.question', verbose_name='questão')),
                ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recommendations', to=settings.AUTH_USER_MODEL, verbose_name='estudante')),
                ('topic', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='recommendations', to='operations.topic', verbose_name='tópico')),
            ],
            options={
                'verbose_name': 'recomendação',
                'verbose_name_plural': 'recomendações',
                'ordering': ['priority', '-created_at'],
            },
        ),
        migrations.CreateModel(
            name='TopicMastery',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('mastery', models.FloatField(default=0.0, validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(1.0)], verbose_name='domínio (0–1)')),
                ('correct_count', models.PositiveIntegerField(default=0, verbose_name='respostas corretas')),
                ('incorrect_count', models.PositiveIntegerField(default=0, verbose_name='respostas incorretas')),
                ('last_attempt_at', models.DateTimeField(blank=True, null=True, verbose_name='última tentativa')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('profile', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='masteries', to='learning.learningprofile', verbose_name='perfil')),
                ('topic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='masteries', to='operations.topic', verbose_name='tópico')),
            ],
            options={
                'verbose_name': 'domínio de tópico',
                'verbose_name_plural': 'domínios de tópicos',
                'ordering': ['mastery'],
                'constraints': [models.UniqueConstraint(fields=('profile', 'topic'), name='unique_profile_topic')],
            },
        ),
    ]
