import Foundation
import ResearchKit

class TestManager {
    static let shared = TestManager()
    
    func createTestTask() -> ORKTask {
        
        // Paso 1: Bienvenida
        let bienvenidaStep = ORKInstructionStep(identifier: "bienvenida")
        bienvenidaStep.title = "Evaluación de Ansiedad y Estado de Ánimo"
        bienvenidaStep.text = "Este test nos ayudará a evaluar cómo te sientes actualmente. Responde con sinceridad."
        
        // Paso 2: Nivel de ansiedad (escala del 1 al 10)
        let ansiedadPregunta = ORKQuestionStep(
            identifier: "nivelAnsiedad",
            title: "¿Qué tan ansioso/a te sientes en una escala del 1 al 10?",
            answer: ORKScaleAnswerFormat(
                maximumValue: 10,
                minimumValue: 1,
                defaultValue: 5,
                step: 1
            )
        )
        ansiedadPregunta.isOptional = false
        
        // Paso 3: Estado de ánimo general (rueda de opciones)
        let estadoAnimoChoices = [
            ORKTextChoice(text: "Muy feliz", value: "muy_feliz" as NSString),
            ORKTextChoice(text: "Feliz", value: "feliz" as NSString),
            ORKTextChoice(text: "Neutral", value: "neutral" as NSString),
            ORKTextChoice(text: "Triste", value: "triste" as NSString),
            ORKTextChoice(text: "Muy triste", value: "muy_triste" as NSString)
        ]
        let estadoAnimoPregunta = ORKQuestionStep(
            identifier: "estadoAnimo",
            title: "¿Cómo describirías tu estado de ánimo actual?",
            answer: ORKValuePickerAnswerFormat(textChoices: estadoAnimoChoices)
        )
        estadoAnimoPregunta.isOptional = false
        
        
        // Paso 4: Frecuencia de síntomas (escala Likert)
        let frecuenciaSintomasPregunta = ORKQuestionStep(
            identifier: "frecuenciaSintomas",
            title: "En la última semana, ¿con qué frecuencia has experimentado estos síntomas?",
            answer: ORKAnswerFormat.textScale(
                with: [
                    ORKTextChoice(text: "Nunca", value: "nunca" as NSString),
                    ORKTextChoice(text: "Rara vez", value: "rara_vez" as NSString),
                    ORKTextChoice(text: "A veces", value: "a_veces" as NSString),
                    ORKTextChoice(text: "Frecuentemente", value: "frecuentemente" as NSString),
                    ORKTextChoice(text: "Todo el tiempo", value: "todo_el_tiempo" as NSString)
                ],
                defaultIndex: 2, // Neutral ("A veces")
                vertical: true
            )
        )
        frecuenciaSintomasPregunta.isOptional = false
        
        // Paso 5: Situaciones específicas (múltiples opciones)
        let situacionesChoices = [
            ORKTextChoice(text: "Dificultad para concentrarte", value: "concentracion" as NSString),
            ORKTextChoice(text: "Pérdida de interés en actividades", value: "interes" as NSString),
            ORKTextChoice(text: "Sensación de nerviosismo", value: "nerviosismo" as NSString),
            ORKTextChoice(text: "Problemas para dormir", value: "sueño" as NSString),
            ORKTextChoice(text: "Cambios en el apetito", value: "apetito" as NSString),
            ORKTextChoice(text: "Ninguno de los anteriores", value: "ninguno" as NSString)
        ]
        let situacionesPregunta = ORKQuestionStep(
            identifier: "situaciones",
            title: "¿Cuáles de las siguientes situaciones has experimentado recientemente?",
            answer: ORKAnswerFormat.choiceAnswerFormat(with: .multipleChoice, textChoices: situacionesChoices)
        )
        
        situacionesPregunta.isOptional = false
        
        // Paso 6: Tiempo al aire libre (respuesta numérica)
        let tiempoAireLibrePregunta = ORKQuestionStep(
            identifier: "tiempoAireLibre",
            title: "¿Cuántas horas pasas al aire libre por día?",
            answer: ORKNumericAnswerFormat(style: .integer, unit: "horas")
        )
        tiempoAireLibrePregunta.isOptional = false
        
        
        // Paso 7: Ejercicio (texto corto)
        let ejercicioPregunta = ORKQuestionStep(
            identifier: "ejercicio",
            title: "¿Qué tipo de ejercicio realizas regularmente?",
            answer: ORKTextAnswerFormat(maximumLength: 100)
        )
        ejercicioPregunta.isOptional = false
        
        // Paso 8: Comentarios adicionales (texto largo)
        let comentariosPregunta = ORKQuestionStep(
            identifier: "comentarios",
            title: "¿Hay algo más que quieras compartir sobre cómo te sientes?",
            answer: {
                let formatoTexto = ORKTextAnswerFormat(maximumLength: 500)
                formatoTexto.multipleLines = true // Permite que el cuadro sea más grande
                return formatoTexto
            }()
        )
        
        comentariosPregunta.isOptional = false
               
        // Paso final: Agradecimiento
        let finStep = ORKInstructionStep(identifier: "fin")
        finStep.title = "¡Gracias por completar el test!"
        finStep.text = "Tus respuestas serán analizadas para ofrecerte mejores recomendaciones."
        
        // Crear el test con todos los pasos
        return ORKOrderedTask(
            identifier: "AnxietyMoodTest",
            steps: [
                bienvenidaStep,
                ansiedadPregunta,
                estadoAnimoPregunta,
                frecuenciaSintomasPregunta,
                situacionesPregunta,
                tiempoAireLibrePregunta,
                ejercicioPregunta,
                comentariosPregunta,
                finStep
            ]
        )
    }
}
