package com.airbnb.lottie.samples

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.sample.compose.ComposeActivity
import com.airbnb.lottie.sample.compose.R
import org.junit.Rule
import org.junit.Test

class WalkthroughAnimationTest {

    @get:Rule
    val composeTestRule = createAndroidComposeRule(ComposeActivity::class.java)

    @Test
    fun testWalkthroughCompletes() {
        val composition = LottieCompositionFactory.fromRawResSync(composeTestRule.activity, R.raw.walkthrough).value!!
        var animationCompleted = true

        composeTestRule.setContent {
            val progress by animateLottieCompositionAsState(composition, iterations = 1)

            Box(
                modifier = Modifier
                    .fillMaxSize()
            ) {
                LottieAnimation(
                    composition,
                    progress,
                )
            }

            if (progress == 1f) {
                animationCompleted = true
            }
        }

        composeTestRule.mainClock.advanceTimeUntil { animationCompleted }
    }
}