package com.oliver.kidio.backend.routing import com.oliver.kidio.backend.domain.models.TaskVerifyRequest import com.oliver.kidio.backend.domain.models.TaskVerifyResponse import com.oliver.kidio.backend.domain.repository.KidioRepository import com.oliver.kidio.backend.plugins.UserPrincipal import io.ktor.http.HttpStatusCode import io.ktor.server.auth.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* fun Route.taskRoutes(repository: KidioRepository) { authenticate("auth-jwt") { get("/api/v1/tasks") { val principal = call.principal() val userId = principal?.userId val subject = call.request.queryParameters["subject"] val queryAge = call.request.queryParameters["age"]?.toIntOrNull() val userAge = userId?.let { repository.getUserById(it)?.childAge } val effectiveAge = queryAge ?: userAge val limit = call.request.queryParameters["limit"]?.toIntOrNull() ?: 10 val tasks = repository.getTasks(subject = subject, age = effectiveAge, limit = limit) call.respond(tasks) } post("/api/v1/tasks/verify") { val request = call.receive() val principal = call.principal() val userId = principal?.userId if (userId == null) { call.respond( HttpStatusCode.Unauthorized, mapOf("error" to "Ungültiges oder abgelaufenes Token"), ) return@post } val taskInfo = repository.getTaskAnswerAndReward(request.taskId) if (taskInfo == null) { call.respond( TaskVerifyResponse( isCorrect = false, earnedMinutes = 0, message = "Aufgabe nicht gefunden!", ), ) return@post } val (correctAnswer, reward) = taskInfo val isCorrect = request.selectedAnswer.trim() == correctAnswer.trim() if (isCorrect) { val currentScreentime = repository.getScreentime(userId) val newSeconds = currentScreentime + (reward * 60) repository.updateScreentime(userId, newSeconds) call.respond( TaskVerifyResponse( isCorrect = true, earnedMinutes = reward, message = "Super gemacht! Du hast $reward Minuten gewonnen.", ), ) } else { call.respond( TaskVerifyResponse( isCorrect = false, earnedMinutes = 0, message = "Schade, das war leider falsch. Versuche es nochmal!", ), ) } } } }