<script setup lang="ts">
const props = defineProps<{
  current: number
  total: number
  pageSize: number
  entityName?: string
}>()

const emits = defineEmits(['update:current', 'update:pageSize'])

const { total } = toRefs(props)

const current = useVModel(props, 'current', emits)

const pageSize = useVModel(props, 'pageSize', emits)

const entityName = computed(() => props.entityName || 'item')

const totalPages = computed(() => Math.max(Math.ceil(total.value / pageSize.value), 1))

const { isMobileMode } = useGlobal()

const changePage = ({ increase }: { increase: boolean }) => {
  if (increase && current.value < totalPages.value) {
    current.value = current.value + 1
  } else if (current.value > 0) {
    current.value = current.value - 1
  }
}

const goToLastPage = () => {
  current.value = totalPages.value
}

const goToFirstPage = () => {
  current.value = 1
}
</script>

<template>
  <div class="nc-pagination flex flex-row items-center gap-x-2">
    <NcButton
      v-if="!isMobileMode"
      v-e="[`a:pagination:${entityName}:first-page`]"
      class="first-page"
      type="secondary"
      size="small"
      :disabled="current === 1"
      @click="goToFirstPage"
    >
      <GeneralIcon icon="doubleLeftArrow" />
    </NcButton>

    <NcButton
      v-e="[`a:pagination:${entityName}:prev-page`]"
      class="prev-page"
      type="secondary"
      size="small"
      :disabled="current === 1"
      @click="changePage({ increase: false })"
    >
      <GeneralIcon icon="arrowLeft" />
    </NcButton>
    <div class="text-gray-600">
      <span class="active"> {{ current }} </span>
      <span class="mx-1"> {{ isMobileMode ? '/' : 'of' }} </span>
      <span class="total">
        {{ totalPages }}
      </span>
    </div>

    <NcButton
      v-e="[`a:pagination:${entityName}:next-page`]"
      class="next-page"
      type="secondary"
      size="small"
      :disabled="current === totalPages"
      @click="changePage({ increase: true })"
    >
      <GeneralIcon icon="arrowRight" />
    </NcButton>

    <NcButton
      v-if="!isMobileMode"
      v-e="[`a:pagination:${entityName}:last-page`]"
      class="last-page"
      type="secondary"
      size="small"
      :disabled="current === totalPages"
      @click="goToLastPage"
    >
      <GeneralIcon icon="doubleRightArrow" />
    </NcButton>
  </div>
</template>
