package info.nightscout.androidaps

import androidx.test.espresso.ViewAction
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector

fun ViewInteraction.isDisplayed(): Boolean {
    try {
        check(matches(ViewMatchers.isDisplayed()))
        return true
    } catch (e: Throwable) {
        return false
    }
}

fun ViewInteraction.waitAndPerform(viewActions: ViewAction): ViewInteraction? {
    val startTime = System.currentTimeMillis()
    while (!isDisplayed()) {
        Thread.sleep(100)
        if (System.currentTimeMillis() - startTime >= 5000) {
            throw AssertionError("View not visible after 5000 milliseconds")
        }
    }
    return perform(viewActions)
}

fun clickOkInDialog() {
    val uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    val button = uiDevice.findObject(UiSelector().clickable(true).checkable(false).index(1))
    if (button.exists() && button.isEnabled) button.click()
}