//
//  ActiveTaskManager.swift
//  RK-Journals
//
//  Created by Juan David López Regalado on 21/11/24.
//

import Foundation
import ResearchKit
import ResearchKitUI
import ResearchKitActiveTask
import ResearchKitActiveTask_Private


class ActiveTaskManager {
    static let shared = ActiveTaskManager()
    
    func createActiveTasks() -> ORKOrderedTask {
        
        let bienvenido = ORKInstructionStep(identifier: "bienvenido")
        bienvenido.title = "Bienvenido"
        bienvenido.iconImage = UIImage(systemName: "hand.wave")
        bienvenido.detailText = "Bienvenido a la sección de tareas activas. Aquí encontrarás diversas actividades que podrás realizar para obtener información sobre algunos aspectos de tu salud."

        //Motor Activities
        let tappingStep = ORKTappingIntervalStep(identifier: "tapping")
        tappingStep.title = "Prueba de tapping"
        tappingStep.detailText = "Toca repetidamente en las áreas designadas lo más rápido posible durante 10 segundos."
        tappingStep.stepDuration = 10 // Duración en segundos
    

        //Cognition
        // Cognition - Trail Making (Solo números)
        let trailMakingStep = ORKTrailmakingStep(identifier: "trail")
        trailMakingStep.title = "Prueba de Trail Making"
        trailMakingStep.detailText = "En este ejercicio, tendrás que conectar los círculos numerados en orden, lo más rápido posible."

        
        let hanoitext = ORKInstructionStep(identifier: "towerOfHanoiInstructions")
        hanoitext.title = "Torre de Hanoi"
        hanoitext.iconImage = UIImage(systemName: "triangle")
        hanoitext.detailText = "Transfiere los discos de la barra inicial a la barra final, siguiendo estas reglas:\n\n1. Solo puedes mover un disco a la vez.\n\n2. No puedes colocar un disco grande encima de uno más pequeño."

               
        let towerOfHanoiStep = ORKTowerOfHanoiStep(identifier: "towerOfHanoiStep")
        towerOfHanoiStep.numberOfDisks = 3
        towerOfHanoiStep.isOptional = false
        
        let flowerPatternInstructionStep = ORKInstructionStep(identifier: "flowerPatternInstructions")
        flowerPatternInstructionStep.title = "Patrón de las Flores"
        flowerPatternInstructionStep.iconImage = UIImage(systemName: "flower.fill")
        flowerPatternInstructionStep.detailText = """
        En esta tarea, verás un patrón formado por flores en una cuadrícula. Tu objetivo será recordar el orden en que aparecen y reproducirlo correctamente.

        1. Observa el patrón de flores que aparece en la pantalla.
        2. Memoriza el orden y la posición de cada flor.
        3. Una vez que el patrón desaparezca, toca en las celdas de la cuadrícula para reproducir el orden que viste.
        4. Trata de ser lo más preciso posible.
        """

        
        let memoryStep = ORKSpatialSpanMemoryStep(identifier: "memory")
            memoryStep.initialSpan = 2
            memoryStep.minimumSpan = 2
            memoryStep.maximumSpan = 3
            memoryStep.playSpeed = 1
            memoryStep.maximumTests = 3
            memoryStep.maximumConsecutiveFailures = 10 // Asegúrate de que sea un número válido

        
        // Audio Capture - Speech Recording Step
        let speechRecognitionStep = ORKSpeechInNoiseStep(identifier: "speechRecognition")
        speechRecognitionStep.title = "Prueba de Reconocimiento de Voz"
        speechRecognitionStep.detailText = "Escucha el siguiente audio, después escribe lo que escuchaste."
        
        let speechText = ORKQuestionStep(
            identifier: "textoAudio",
            title: "Escribe lo que escuchaste en el audio",
            answer: {
                let formatoTexto = ORKTextAnswerFormat(maximumLength: 500)
                formatoTexto.multipleLines = true // Permite que el cuadro sea más grande
                return formatoTexto
            }()
        )
        speechText.isOptional = false
        
        
        //Hearing
        let toneStep = ORKToneAudiometryStep(identifier: "toneAudiometry")
        toneStep.toneDuration = 10
        toneStep.title = "Prueba de Audiometría de Tono"
        toneStep.detailText = "En este ejercicio escucharás tonos a diferentes frecuencias y volúmenes. Por favor, indica cuándo puedas escuchar el tono y por cuál oido lo escuhas. El objetivo es evaluar tu capacidad auditiva."


        //Hand Dexterity
        let handStep = ORKHolePegTestPlaceStep(identifier: "hole")
        handStep.title = "Prueba de Destreza Manual"
        handStep.detailText = "En este ejercicio, debes insertar los pegs (barras) en los agujeros lo más rápido posible. Trata de ser preciso y rápido, y asegúrate de no dejar caer ninguna pieza."
        handStep.numberOfPegs = 9
        handStep.stepDuration = 30
        
        let visionInstructionStep = ORKInstructionStep(identifier: "amslerGridInstructions")
        visionInstructionStep.title = "Rejilla de Amsler"
        visionInstructionStep.iconImage = UIImage(systemName: "eye.fill")
        visionInstructionStep.detailText = """
        En esta prueba, observa la rejilla de Amsler en la pantalla y responde a las preguntas a continuación.

        1. Asegúrate de estar en un lugar cómodo y con buena iluminación.
        2. Si usas gafas, póntelas antes de comenzar.
        3. Mira la rejilla con ambos ojos, pero si es necesario, cierra un ojo a la vez.
        4. Indica si ves alguna distorsión, línea torcida o áreas vacías.
        5. cuando indiques sobre que areas hay distorsión, da swipe sobre la pantalla negra haceia la derecha.
        """
        
        // Vision - Amsler Grid
        let visionStep = ORKAmslerGridStep(identifier: "vision")
        visionStep.stepDuration = 30
        visionStep.title = "Prueba de la Rejilla de Amsler"
        visionStep.detailText = "Este test se usa para detectar problemas visuales relacionados con la macula. Mira el centro de la rejilla y marca cualquier distorsión o área oscura que puedas ver en la cuadrícula."

        let completionStep = ORKCompletionStep(identifier: "taskCompletion")
        completionStep.title = "¡Tareas Completadas!"
        completionStep.iconImage = UIImage(systemName: "checkmark.circle.fill")
        completionStep.detailText = """
        Has completado todas las tareas del estudio. ¡Gracias por tu participación!

        Recuerda que tu contribución es muy valiosa para esta investigación.
        """

        
        return ORKOrderedTask(identifier: "activeTasks", steps: [bienvenido, tappingStep, trailMakingStep, hanoitext, towerOfHanoiStep, flowerPatternInstructionStep, memoryStep, speechRecognitionStep, speechText, toneStep, handStep, visionInstructionStep, visionStep, completionStep])
       }
   }
