<script setup>
import Icon from 'dashboard/components-next/icon/Icon.vue';
import Button from 'dashboard/components-next/button/Button.vue';
import Spinner from 'dashboard/components-next/spinner/Spinner.vue';

defineProps({
  items: {
    type: Array,
    default: () => [],
  },
  isFetching: {
    type: Boolean,
    default: false,
  },
  emptyStateMessage: {
    type: String,
    default: '',
  },
});

const emit = defineEmits(['delete']);

const handleDelete = itemId => {
  emit('delete', itemId);
};
</script>

<template>
  <div
    v-if="isFetching"
    class="flex items-center justify-center py-3 w-full text-n-slate-11"
  >
    <Spinner />
  </div>
  <span
    v-else-if="items.length === 0 && emptyStateMessage"
    class="flex items-center justify-center pt-4 pb-8 w-full text-sm text-n-slate-11"
  >
    {{ emptyStateMessage }}
  </span>
  <div v-else class="flex flex-col divide-y divide-n-weak">
    <div
      v-for="item in items"
      :key="item.id"
      class="grid grid-cols-4 items-center gap-3 min-w-0 w-full justify-between h-[3.25rem] ltr:pr-2 rtl:pl-2"
    >
      <div class="flex items-center gap-2 col-span-2">
        <Icon
          v-if="item.icon"
          :icon="item.icon"
          class="size-4 text-n-slate-12 flex-shrink-0"
        />

        <span class="text-sm text-n-slate-12 truncate min-w-0">
          {{ item.name }}
        </span>
      </div>

      <div class="flex items-start gap-2 col-span-1">
        <span
          :title="item.email || item.phoneNumber"
          class="text-sm text-n-slate-12 truncate min-w-0"
        >
          {{ item.email || item.phoneNumber }}
        </span>
      </div>

      <div class="col-span-1 justify-end flex items-center">
        <Button
          icon="i-lucide-trash"
          slate
          ghost
          sm
          type="button"
          @click="handleDelete(item.id)"
        />
      </div>
    </div>
  </div>
</template>
