"""
Comando de management: crea (o actualiza) la version 1.0 de las tres encuestas
base del sistema. Uso:

    python manage.py seed_encuestas
"""
from django.core.management.base import BaseCommand
from django.db import transaction

from evaluacion.models import EncuestaPlantilla, Pregunta

DATA = {
    EncuestaPlantilla.TIPO_ESTUDIANTE: {
        "titulo": "Evaluacion del docente por el estudiante",
        "preguntas": [
            ("El docente explica los temas con claridad.", "likert", True),
            ("El docente domina los contenidos de la asignatura.", "likert", True),
            ("El docente cumple con el horario de clases.", "likert", True),
            ("El docente responde con respeto a las preguntas de los estudiantes.", "likert", True),
            ("El docente utiliza metodos de evaluacion justos.", "likert", True),
            ("Recomendaria a este docente para futuras materias.", "likert", True),
            ("Comentarios adicionales (opcional).", "abierta", False),
        ],
    },
    EncuestaPlantilla.TIPO_AUTOEVALUACION: {
        "titulo": "Autoevaluacion del docente",
        "preguntas": [
            ("Cumpli con la totalidad del programa de la asignatura.", "likert", True),
            ("Utilice metodos de ensenanza variados y efectivos.", "likert", True),
            ("Brinde retroalimentacion oportuna a mis estudiantes.", "likert", True),
            ("Actualice mis conocimientos y material de la asignatura.", "likert", True),
            ("Identifico aspectos que puedo mejorar en mi desempeno.", "abierta", True),
        ],
    },
    EncuestaPlantilla.TIPO_DIRECTOR: {
        "titulo": "Evaluacion del docente por el director de carrera",
        "preguntas": [
            ("El docente entrego oportunamente su planificacion y documentacion.", "likert", True),
            ("El docente cumple con las normativas y reglamentos institucionales.", "likert", True),
            ("El docente mantiene una actitud colaborativa con la carrera.", "likert", True),
            ("El desempeno general del docente en el periodo es satisfactorio.", "likert", True),
            ("Observaciones del director de carrera (opcional).", "abierta", False),
        ],
    },
}


class Command(BaseCommand):
    help = "Crea la version 1.0 de las tres encuestas base (idempotente)."

    @transaction.atomic
    def handle(self, *args, **options):
        for tipo, contenido in DATA.items():
            plantilla, creada = EncuestaPlantilla.objects.get_or_create(
                tipo=tipo, version="1.0",
                defaults={"titulo": contenido["titulo"], "activa": True},
            )
            accion = "creada" if creada else "ya existia"
            self.stdout.write(f"Plantilla {tipo} v1.0: {accion}")

            if creada:
                for i, (texto, escala, requerida) in enumerate(contenido["preguntas"], start=1):
                    Pregunta.objects.create(
                        plantilla=plantilla, orden=i, texto=texto,
                        escala=escala, requerida=requerida,
                    )
                self.stdout.write(f"  -> {len(contenido['preguntas'])} preguntas creadas")

        self.stdout.write(self.style.SUCCESS("Encuestas base listas."))
