<script setup lang="ts">
import Card from "./components/Card.vue";
import { getCardList } from "@/api/list";
import { message } from "@/utils/message";
import { ElMessageBox } from "element-plus";
import { ref, onMounted, nextTick, markRaw } from "vue";
import dialogForm from "./components/DialogForm.vue";
import { useRouter } from "vue-router";
import { isString } from "@pureadmin/utils";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
// import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import Search from "@iconify-icons/ep/search";
// import AddFill from "@iconify-icons/ri/add-circle-line";
import emptyPic from "@/assets/static/project_empty.png";
import { QuestionFilled } from "@element-plus/icons-vue";

defineOptions({
  name: "ProjectList"
});

const svg = `
        <path class="path" d="
          M 30 15
          L 28 17
          M 25.61 25.61
          A 15 15, 0, 0, 1, 15 30
          A 15 15, 0, 1, 1, 27.99 7.5
          L 15 15
        " style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>
      `;

const INITIAL_DATA = {
  name: "",
  status: "",
  description: "",
  type: "",
  mark: "",
  leader: "",
  phone: ""
};

const pagination = ref({ current: 1, pageSize: 12, total: 0 });

const productList = ref([]);
const dataLoading = ref(true);

const getCardListData = async () => {
  try {
    const { data } = await getCardList();
    productList.value = data.list;
    pagination.value = {
      ...pagination.value,
      total: data.list.length
    };
  } catch (e) {
    console.log(e);
  } finally {
    setTimeout(() => {
      dataLoading.value = false;
    }, 500);
  }
};

onMounted(() => {
  getCardListData();
});

const formDialogVisible = ref(false);
const formData = ref({ ...INITIAL_DATA });
const searchValue = ref("");

const onPageSizeChange = (size: number) => {
  pagination.value.pageSize = size;
  pagination.value.current = 1;
};
const onCurrentChange = (current: number) => {
  pagination.value.current = current;
};
const handleDeleteItem = product => {
  ElMessageBox.confirm(
    product ? `确定删除这个项目吗，删除后将无法找回，请谨慎操作` : "",
    "确定删除这个项目吗？",
    {
      showClose: false,
      type: "warning",
      icon: markRaw(QuestionFilled),
      customClass: "msg-box-style",
      confirmButtonClass: "btn-custom-confirm",
      cancelButtonClass: "btn-custom-cancel"
    }
  )
    .then(() => {
      productList.value.forEach((item, index) => {
        console.log(item.type);
        if (item.type == product.type) {
          productList.value.splice(index, 1);
        }
      });
      pagination.value.total = productList.value.length;
      message("删除成功", { type: "success" });
    })
    .catch(() => {});
};
const handleManageProduct = product => {
  formDialogVisible.value = true;
  nextTick(() => {
    formData.value = { ...product, status: product?.isSetup ? "1" : "0" };
  });
};
const router = useRouter();
const handleProductDetail = product => {
  Object.keys(product).forEach(param => {
    if (!isString(product[param])) {
      product[param] = product[param].toString();
    }
  });
  // 保存信息到标签页
  useMultiTagsStoreHook().handleTags("push", {
    path: `/project/details`,
    name: "ProjectDetails",
    query: product,
    meta: {
      title: `项目详情`,
      showLink: false
    }
  });
  router.push({ name: "ProjectDetails", query: product });
};
const addProject = product => {
  console.log(product.value);

  if (!product.value.type) {
    const data = product.value;
    data.type = 1;
    productList.value.unshift(data);
  } else {
    productList.value.forEach((item, index) => {
      if (item.type == product.value.type) {
        Object.assign(productList.value[index], product.value);
      }
    });
    // Object.assign(productList.value, product.value);
  }
  pagination.value.total = productList.value.length;
};
</script>

<template>
  <div class="main">
    <div class="w-full flex justify-between mb-4">
      <h2>项目列表</h2>
      <el-button
        type="primary"
        color="#1C0D82"
        @click="formDialogVisible = true"
        v-if="pagination.total > 0"
      >
        新建项目
      </el-button>
      <el-input
        style="width: 300px"
        v-model="searchValue"
        placeholder="请输入项目名称"
        clearable
        v-if="false"
      >
        <template #suffix>
          <el-icon class="el-input__icon">
            <IconifyIconOffline
              v-show="searchValue.length === 0"
              :icon="Search"
            />
          </el-icon>
        </template>
      </el-input>
    </div>
    <div
      v-loading="dataLoading"
      :element-loading-svg="svg"
      element-loading-svg-view-box="-10, -10, 50, 50"
    >
      <el-card
        class="box-card"
        :body-style="{
          height: '462px',
          display: 'flex',
          'justify-content': 'center',
          'align-items': 'center'
        }"
        v-show="
          productList
            .slice(
              pagination.pageSize * (pagination.current - 1),
              pagination.pageSize * pagination.current
            )
            .filter(v =>
              v.name.toLowerCase().includes(searchValue.toLowerCase())
            ).length === 0
        "
      >
        <el-empty description="暂未添加任何项目" :image="emptyPic">
          <el-button
            type="primary"
            color="#1C0D82"
            @click="formDialogVisible = true"
          >
            新建项目
          </el-button>
        </el-empty>
      </el-card>
      <template v-if="pagination.total > 0">
        <el-card shadow="never">
          <el-row :gutter="16">
            <el-col
              v-for="(product, index) in productList
                .slice(
                  pagination.pageSize * (pagination.current - 1),
                  pagination.pageSize * pagination.current
                )
                .filter(v =>
                  v.name.toLowerCase().includes(searchValue.toLowerCase())
                )"
              :key="index"
              :xs="24"
              :sm="12"
              :md="8"
              :lg="6"
              :xl="4"
            >
              <Card
                :product="product"
                @delete-item="handleDeleteItem"
                @manage-product="handleManageProduct"
                @product-detail="handleProductDetail"
              />
            </el-col>
          </el-row>
          <el-pagination
            class="justify-end"
            v-model:currentPage="pagination.current"
            :page-size="pagination.pageSize"
            :total="pagination.total"
            :page-sizes="[12, 24, 36]"
            :background="true"
            layout="total, sizes, prev, pager, next, jumper"
            @size-change="onPageSizeChange"
            @current-change="onCurrentChange"
          />
        </el-card>
      </template>
    </div>
    <dialogForm
      v-model:visible="formDialogVisible"
      :data="formData"
      @submit-form="addProject"
    />
  </div>
</template>
<style lang="scss">
// :deep(.el-dialog, .is-draggable, .el-dialog__header) {
//   border-bottom: 1px solid #eee !important;
// }
.msg-box-style {
  // --el-messagebox-width: 580px;
  // height: 184px;
  .btn-custom-cancel:hover {
    color: #fff;
    // color: skyblue;
    background-color: #1c0d82;
    opacity: 0.5;
  }

  .btn-custom-confirm {
    color: #fff;
    background-color: #1c0d82;
    border: #1c0d82;

    &:hover {
      color: #fff;
      // color: skyblue;
      background-color: #1c0d82;
      opacity: 0.5;
    }
  }
}
</style>
