<template>
  <div class="container">
    <a-card class="general-card" title="">
      <a-table
        :loading="loading"
        :pagination="pagination"
        :columns="(cloneColumns as TableColumnData[])"
        :data="renderData"
        :bordered="false"
        :size="size"
        @page-change="onPageChange"
      >
        <template #index="{ rowIndex }">
          {{ rowIndex + 1 + (pagination.current - 1) * pagination.pageSize }}
        </template>
        <template #picture="{ record }">
          <a-image width="40" :src="record.picture" />
        </template>
      </a-table>
    </a-card>
  </div>
</template>

<script lang="ts" name="FaceListPage" setup>
import { computed, ref, reactive, watch, nextTick } from 'vue';
import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
import { useI18n } from 'vue-i18n';
import useLoading from '@/hooks/loading';
import { Pagination } from '@/types/global';
import type { RecordParams } from '@/api/record';
import { queryFaceList } from '@/api/face';
import type { DataList } from '@/api/face';

type SizeProps = 'mini' | 'small' | 'medium' | 'large';
type Column = TableColumnData & { checked?: true };
interface FaceParams {
  pageIndex: number;
  personNumber: number;
}
const { loading, setLoading } = useLoading(true);
const { t } = useI18n();
const generateFormModel = () => {
  return {
    pageIndex: 1,
    personNumber: 20,
  } as FaceParams;
};
const renderData = ref<DataList[]>([] as DataList[]);
const formModel = ref<FaceParams>(generateFormModel());

const cloneColumns = ref<Column[]>([
  {
    title: t('faceList.columns.index'),
    dataIndex: 'index',
    slotName: 'index',
    ellipsis: true,
    tooltip: true,
    width: 60,
  },
  {
    title: t('recordList.columns.picture'),
    dataIndex: 'picture',
    slotName: 'picture',
    width: 100,
  },
  {
    title: t('faceList.columns.name'),
    dataIndex: 'name',
    ellipsis: true,
    tooltip: true,
  },
  {
    title: t('faceList.columns.nameCh'),
    dataIndex: 'nameCh',
  },
  {
    title: t('faceList.columns.company'),
    dataIndex: 'company',
    ellipsis: true,
  },
  {
    title: t('faceList.columns.Position'),
    dataIndex: 'Position',
    ellipsis: true,
    tooltip: { position: 'left' },
  },
  {
    title: t('faceList.columns.id'),
    dataIndex: 'id',
    ellipsis: true,
  },
]);

const size = ref<SizeProps>('medium');

const basePagination: Pagination = {
  current: 1,
  pageSize: 20,
};
const pagination = reactive({
  ...basePagination,
});
const fetchData = async () => {
  setLoading(true);
  try {
    queryFaceList(formModel.value).then(res => {
      renderData.value = res.data;
      pagination.current = formModel.value.pageIndex;
      pagination.pageSize = pagination.pageSize;
      pagination.total = res.total;
    });
  } catch (err) {
    // you can report use errorHandler or other
  } finally {
    setLoading(false);
  }
};
fetchData();
const onPageChange = (current: number) => {
  formModel.value.pageIndex = current;
  fetchData();
};
</script>

<style scoped lang="less">
.container {
  padding: 10px;

  :deep(.arco-list-content) {
    overflow-x: hidden;
  }

  :deep(.arco-card-meta-title) {
    font-size: 14px;
  }

  .general-card {
    padding-top: 10px;
  }
}
</style>
