<template>
  <div class="container">
    <el-tabs
      v-model="activeMenu"
      closable
      :stretch="false"
      type="card"
      @tab-remove="handleTabRemove"
      @tab-change="handleTabChange"
    >
      <el-tab-pane
        v-for="(item, index) in menuList"
        :key="index"
        :label="item.title"
        :name="item.id"
      >
        <div class="main">
          <mailList
            v-show="item.id.includes('folder')"
            :ref="'folder' + index"
          ></mailList>
          <mailDetail
            v-show="item.id.includes('detail')"
            :ref="'detail' + index"
          ></mailDetail>
          <mailWrite
            v-show="item.id.includes('write')"
            :ref="'write' + index"
          ></mailWrite>
        </div>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>

<script setup>
import mailList from "./mailList.vue";
import mailDetail from "./mailDetail.vue";
import mailWrite from "./mailWrite.vue";

import useMailStore from "@/store/modules/mail";
import { ElMessage, ElMessageBox } from "element-plus";
import { nextTick, watch } from "vue";

const mailStore = useMailStore();
const { proxy } = getCurrentInstance();
const menuList = ref([]);
let activeMenu = ref("");
// 订阅监听
mailStore.$subscribe((mutations, state) => {
  activeMenu.value = state.currentId;
  menuList.value = state.mailMenuList;
});

const handleTabRemove = (id) => {
  const clickIndex = menuList.value.findIndex((x) => x.id === id);
  let currentMenu = {};
  if (menuList.value.length > 1) {
    // 如果删除的是当前菜单
    if (activeMenu.value === id) {
      if (menuList.value.length > clickIndex + 1) {
        currentMenu = menuList.value[clickIndex + 1];
      } else {
        currentMenu = menuList.value[clickIndex - 1];
      }
      // 更新store值
      mailStore.currentMenu = currentMenu;
      mailStore.currentId = currentMenu.id;
    }
    menuList.value.splice(clickIndex, 1);
  } else {
    return ElMessage({
      message: "最后一个标签页啦!",
      type: "info",
    });
  }
};

const checkType = (menu, type) => {
  // if (type == "write") return;
  const index = menuList.value.findIndex((x) => x.id === activeMenu.value);
  const dom = type + index.toString();
  nextTick(() => {
    if (type == "write") {
      proxy.$refs[dom][0].initFn();
    } else {
      proxy.$refs[dom][0].initFn();
    }
  });
};

const handleTabChange = (val) => {
  const currentMenu = menuList.value.find((x) => x.id === val);
  mailStore.$patch({
    currentId: val,
    currentMenu: currentMenu,
  });
  // 判断是文件夹还是邮件详情
  let type = "";
  if (currentMenu.id.includes("folder")) {
    type = "folder";
    // 如果更换的是文件夹菜单则更新左侧样式
    proxy.$emit("changeFloderId", currentMenu.folderId);
  } else if (currentMenu.id.includes("detail")) {
    type = "detail";
  } else {
    type = "write";
  }
  checkType(currentMenu, type);
};

onMounted(() => {});
</script>

<style lang="scss" scoped>
.container {
  .main {
    height: calc(100vh - 180px);
    overflow: auto;
  }
}
</style>