/*
* Copyright (C) 2023 NotEnoughUpdates contributors
*
* This file is part of NotEnoughUpdates.
*
* NotEnoughUpdates is free software: you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* NotEnoughUpdates is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with NotEnoughUpdates. If not, see .
*/
package io.github.moulberry.notenoughupdates.miscfeatures
import io.github.moulberry.notenoughupdates.NotEnoughUpdates
import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorButton
import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorFSR
import io.github.moulberry.notenoughupdates.core.config.gui.GuiOptionEditorText
import io.github.moulberry.notenoughupdates.core.config.struct.ConfigProcessor.ProcessedOption
import io.github.moulberry.notenoughupdates.util.Calculator
import io.github.moulberry.notenoughupdates.util.Calculator.CalculatorException
import java.math.BigDecimal
import kotlin.random.Random
object IQTest {
fun randOperator() = listOf("+", "*").random()
fun randNum() = Random.nextInt(1, 20)
val question = "${randNum()} ${randOperator()} ${randNum()} ${randOperator()} ${randNum()}"
@JvmStatic
fun testIQ() {
val testedAnswer = try {
Calculator.calculate(answer)
} catch (e: CalculatorException) {
wrongAnswer()
return
}
val realAnswer = Calculator.calculate(question)
if (testedAnswer.subtract(realAnswer).abs() < BigDecimal.valueOf(0.1)) {
NotEnoughUpdates.INSTANCE.config.apiData.apiDataUnlocked = true
lastAnsweredTimestamp = 0L
} else {
wrongAnswer()
}
}
private fun wrongAnswer() {
lastAnsweredTimestamp = System.currentTimeMillis()
}
var lastAnsweredTimestamp = 0L
@JvmField
@Suppress("UNUSED")
var buttonPlaceHolder = false
@JvmField
var answer = ""
val answerOption = ProcessedOption(
"IQ Test Question",
"Please type out the answer to §a$question\n§cIf you just want to set your api key do §6/neusetkey ",
-1,
javaClass.getField("answer"),
this,
arrayOf()
).also {
it.editor = GuiOptionEditorText(it)
}
val warningOption = ProcessedOption(
"§4§lWARNING",
"§4§lThis page is dangerous. Please make sure you know what you are doing!",
-1,
javaClass.getField("buttonPlaceHolder"),
this,
arrayOf()
).also {
it.editor = GuiOptionEditorButton(it, 27, "SUBMIT", NotEnoughUpdates.INSTANCE.config)
}
val wrongOption = ProcessedOption(
"§4Wrong Answer",
"§4Please think twice before accessing it.",
-1,
javaClass.getField("buttonPlaceHolder"),
this,
arrayOf()
).also {
it.editor = GuiOptionEditorFSR(it, -1, "", NotEnoughUpdates.INSTANCE.config)
}
@get:JvmStatic
val options
get() = LinkedHashMap().also {
it["iqTestAnswer"] = answerOption
it["iqTestSubmit"] = warningOption
if (System.currentTimeMillis() - lastAnsweredTimestamp < 10_000L) {
it["iqTestWrong"] = wrongOption
}
}
}