package com.yorvana.regression.setup

import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.yorvana.MainActivity
import com.yorvana.R
import com.yorvana.testsupport.RetryRule
import com.yorvana.testsupport.SystemPicker
import com.yorvana.testsupport.awaitText
import com.yorvana.testsupport.resetYorvanaState
import com.yorvana.testsupport.tiers.Regression
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
import org.junit.runner.RunWith

@Regression
@RunWith(AndroidJUnit4::class)
class SetupRegressionTest {
    private val retryRule = RetryRule()
    private val composeRule = createAndroidComposeRule<MainActivity>()

    @get:Rule
    val ruleChain: RuleChain = RuleChain.outerRule(retryRule).around(composeRule)

    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

    @Before
    fun setUp() {
        composeRule.resetYorvanaState()
    }

    @After
    fun tearDown() {
        composeRule.resetYorvanaState()
    }

    @Test
    fun rD01_freshSetup_realSafFolderPicker_completesSetup() {
        val folderName = "Yorvana R-D01 ${System.currentTimeMillis()}"

        composeRule.onNodeWithText(composeRule.activity.getString(R.string.setup_choose_folder)).performClick()
        SystemPicker
            .createAndPickFolder(device, folderName)

        composeRule.awaitText(composeRule.activity.getString(R.string.setup_complete))
        composeRule.onNodeWithText(composeRule.activity.getString(R.string.setup_complete)).performClick()

        composeRule.awaitText(composeRule.activity.getString(R.string.my_garage), timeoutMillis = 30_000)
    }
}
