package com.airbnb.lottie.samples.utils

import android.os.Bundle
import android.view.View
import com.airbnb.epoxy.AsyncEpoxyController
import com.airbnb.epoxy.EpoxyController
import com.airbnb.lottie.samples.R
import com.airbnb.lottie.samples.databinding.BaseFragmentBinding
import com.airbnb.mvrx.BaseMvRxFragment


private class BaseEpoxyController(
    private val buildModelsCallback: EpoxyController.() -> Unit
) : AsyncEpoxyController() {
    override fun buildModels() {
        buildModelsCallback()
    }
}

abstract class BaseEpoxyFragment : BaseMvRxFragment(R.layout.base_fragment) {
    protected val binding: BaseFragmentBinding by viewBinding()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        binding.recyclerView.setController(BaseEpoxyController { buildModels() })
    }

    override fun invalidate() {
        binding.recyclerView.requestModelBuild()
    }

    abstract fun EpoxyController.buildModels()
}