# Generated by Django 6.0.7 on 2026-07-16 19:02

import django.core.validators
import django.db.models.deletion
import evaluacion.models
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Carrera',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=150)),
                ('escudo', models.ImageField(blank=True, null=True, upload_to=evaluacion.models.ruta_escudo_carrera, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['png', 'jpg', 'jpeg', 'webp', 'svg']), evaluacion.models.validar_tamano_escudo])),
            ],
            options={
                'ordering': ['facultad__nombre', 'nombre'],
            },
        ),
        migrations.CreateModel(
            name='Facultad',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=150, unique=True)),
                ('escudo', models.ImageField(blank=True, null=True, upload_to=evaluacion.models.ruta_escudo_facultad, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['png', 'jpg', 'jpeg', 'webp', 'svg']), evaluacion.models.validar_tamano_escudo])),
            ],
            options={
                'ordering': ['nombre'],
            },
        ),
        migrations.CreateModel(
            name='Gestion',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=20, unique=True)),
                ('fecha_inicio', models.DateField()),
                ('fecha_fin', models.DateField()),
                ('activa', models.BooleanField(default=True)),
            ],
            options={
                'ordering': ['-fecha_inicio'],
            },
        ),
        migrations.CreateModel(
            name='Asignatura',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=150)),
                ('carrera', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='asignaturas', to='evaluacion.carrera')),
            ],
            options={
                'ordering': ['carrera__nombre', 'nombre'],
                'unique_together': {('nombre', 'carrera')},
            },
        ),
        migrations.CreateModel(
            name='EncuestaPlantilla',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('tipo', models.CharField(choices=[('ESTUDIANTE', 'Encuesta al estudiante'), ('AUTOEVALUACION', 'Autoevaluacion docente'), ('DIRECTOR', 'Encuesta al director de carrera')], max_length=20)),
                ('version', models.CharField(default='1.0', max_length=10)),
                ('titulo', models.CharField(max_length=200)),
                ('activa', models.BooleanField(default=True, help_text='Solo una plantilla activa por tipo debe usarse para generar nuevos tokens.')),
            ],
            options={
                'ordering': ['tipo', '-version'],
                'unique_together': {('tipo', 'version')},
            },
        ),
        migrations.AddField(
            model_name='carrera',
            name='facultad',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='carreras', to='evaluacion.facultad'),
        ),
        migrations.CreateModel(
            name='Persona',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=150)),
                ('email', models.EmailField(max_length=254)),
                ('rol', models.CharField(choices=[('DOCENTE', 'Docente'), ('DIRECTOR', 'Director de carrera')], max_length=10)),
            ],
            options={
                'verbose_name_plural': 'Personas',
                'ordering': ['nombre'],
                'unique_together': {('email', 'rol')},
            },
        ),
        migrations.CreateModel(
            name='Grupo',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('codigo', models.CharField(help_text='Ej: G1, G2', max_length=10)),
                ('cantidad_estudiantes', models.PositiveIntegerField(help_text='Cantidad de estudiantes matriculados (no se registra su identidad).')),
                ('asignatura', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='grupos', to='evaluacion.asignatura')),
                ('gestion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='grupos', to='evaluacion.gestion')),
                ('director', models.ForeignKey(limit_choices_to={'rol': 'DIRECTOR'}, on_delete=django.db.models.deletion.PROTECT, related_name='grupos_supervisados', to='evaluacion.persona')),
                ('docente', models.ForeignKey(limit_choices_to={'rol': 'DOCENTE'}, on_delete=django.db.models.deletion.PROTECT, related_name='grupos_dictados', to='evaluacion.persona')),
            ],
            options={
                'ordering': ['-gestion__fecha_inicio', 'asignatura__nombre', 'codigo'],
                'unique_together': {('asignatura', 'gestion', 'codigo')},
            },
        ),
        migrations.CreateModel(
            name='Pregunta',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('orden', models.PositiveSmallIntegerField(default=1)),
                ('texto', models.CharField(max_length=400)),
                ('escala', models.CharField(choices=[('likert', 'Escala Likert 1-5'), ('abierta', 'Respuesta abierta')], default='likert', max_length=10)),
                ('requerida', models.BooleanField(default=True)),
                ('plantilla', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='preguntas', to='evaluacion.encuestaplantilla')),
            ],
            options={
                'ordering': ['plantilla', 'orden'],
            },
        ),
        migrations.CreateModel(
            name='Token',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('token', models.CharField(default=evaluacion.models.generar_token, editable=False, max_length=32, unique=True)),
                ('tipo', models.CharField(choices=[('ESTUDIANTE', 'Encuesta al estudiante'), ('AUTOEVALUACION', 'Autoevaluacion docente'), ('DIRECTOR', 'Encuesta al director de carrera')], max_length=20)),
                ('etiqueta', models.CharField(blank=True, max_length=50)),
                ('estado', models.CharField(choices=[('no_usado', 'No usado'), ('usado', 'Usado'), ('expirado', 'Expirado')], default='no_usado', max_length=10)),
                ('creado_en', models.DateTimeField(auto_now_add=True)),
                ('usado_en', models.DateTimeField(blank=True, null=True)),
                ('grupo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tokens', to='evaluacion.grupo')),
                ('plantilla', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='tokens', to='evaluacion.encuestaplantilla')),
            ],
        ),
        migrations.CreateModel(
            name='Respuesta',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('respuestas', models.JSONField()),
                ('enviado_en', models.DateTimeField(auto_now_add=True)),
                ('plantilla', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='evaluacion.encuestaplantilla')),
                ('token', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='respuesta', to='evaluacion.token')),
            ],
        ),
        migrations.AlterUniqueTogether(
            name='carrera',
            unique_together={('nombre', 'facultad')},
        ),
        migrations.AddIndex(
            model_name='token',
            index=models.Index(fields=['token'], name='evaluacion__token_d9f92d_idx'),
        ),
        migrations.AddIndex(
            model_name='token',
            index=models.Index(fields=['grupo', 'tipo'], name='evaluacion__grupo_i_6379e9_idx'),
        ),
    ]
