package com.teixeira0x.subtypo.ui.videopicker.util

import android.graphics.Rect
import android.view.View
import androidx.recyclerview.widget.RecyclerView

/**
 * Code adapted from
 * https://stackoverflow.com/questions/28531996/android-recyclerview-gridlayoutmanager-column-spacing
 */
class GridSpacingItemDecoration(
  private val spanCount: Int,
  private val spacing: Int,
  private val includeEdge: Boolean,
) : RecyclerView.ItemDecoration() {

  override fun getItemOffsets(
    outRect: Rect,
    view: View,
    parent: RecyclerView,
    state: RecyclerView.State,
  ) {
    val position = parent.getChildAdapterPosition(view) // item position
    val column = position % spanCount // item column

    if (includeEdge) {
      outRect.left =
        spacing -
          column * spacing /
            spanCount // spacing - column * ((1f / spanCount) * spacing)
      outRect.right =
        (column + 1) * spacing /
          spanCount // (column + 1) * ((1f / spanCount) * spacing)

      if (position < spanCount) { // top edge
        outRect.top = spacing
      }
      outRect.bottom = spacing // item bottom
    } else {
      outRect.left =
        column * spacing / spanCount // column * ((1f / spanCount) * spacing)
      outRect.right =
        spacing -
          (column + 1) * spacing /
            spanCount // spacing - (column + 1) * ((1f / spanCount) * spacing)

      if (position >= spanCount) { // item top
        outRect.top = spacing
      }
    }
  }
}
