<template>
  <div class="home">
    <tiny-checkbox class="selectHome" v-model="state.checked" :disabled="state.selectDisable" @change="settingHome"
      >设为主页</tiny-checkbox
    >
    <div class="tip">
      <span>当前主页是</span>
      <span class="home-page">【{{ homePage }}】</span>
    </div>
  </div>
</template>

<script lang="ts">
/* metaService: engine.plugins.appmanage.PageHome */
import { computed, reactive, watchEffect, inject } from 'vue'
import type { Component } from 'vue'
import { Checkbox } from '@opentiny/vue'
import { usePage, useModal, useNotify } from '@opentiny/tiny-engine-meta-register'
import { isVsCodeEnv } from '@opentiny/tiny-engine-common/js/environments'
import { generateRouter } from '@opentiny/tiny-engine-common/js/vscodeGenerateFile'
import http from './http'

export default {
  components: {
    TinyCheckbox: Checkbox as Component
  },
  setup() {
    const { pageSettingState, STATIC_PAGE_GROUP_ID } = usePage()
    const { handleRouteHomeUpdate } = http
    const { confirm } = useModal()
    const state = reactive({
      checked: false,
      selectDisable: false
    })
    watchEffect(() => {
      const isChecked = Boolean(pageSettingState.currentPageData?.isHome)
      state.checked = isChecked
      state.selectDisable = isChecked
    })
    const homePage = computed(() => {
      let home = '暂无主页'
      if (pageSettingState.pages[STATIC_PAGE_GROUP_ID]) {
        const data = pageSettingState.pages[STATIC_PAGE_GROUP_ID].data
        const homeData = data.filter((item) => item.isHome)

        if (homeData[0]) {
          home = homeData[0].name
        }
      }

      return home
    })

    const openSettingPanel = inject('openSettingPanel')

    const settingHome = () => {
      confirm({
        title: '提示',
        type: 'warning ',
        message: '是否确定要将此页面设置为主页?您所做的任何未保存的更改都将被丢弃。',
        exec: () => {
          const { id } = pageSettingState.currentPageData
          const params = { ...pageSettingState.currentPageData }

          params.isHome = true

          handleRouteHomeUpdate(id, params)
            .then(() => {
              pageSettingState.updateTreeData()
              openSettingPanel(pageSettingState.currentPageData)
              pageSettingState.isNew = false
              if (isVsCodeEnv) {
                generateRouter({
                  pageId: id,
                  componentsTree: params
                })
              }
              useNotify({ message: '主页设置成功!', type: 'success' })
            })
            .catch(() => {
              useNotify({ message: '主页设置失败!', type: 'error' })
            })
        },
        cancel: () => {
          state.checked = false
        }
      })
    }
    return {
      pageSettingState,
      settingHome,
      homePage,
      state
    }
  }
}
</script>

<style lang="less" scoped>
.home {
  color: var(--te-page-manage-text-color);
  line-height: 24px;
  .homeTitle {
    margin: 10px 0 0 5px;
    display: inline-block;
  }

  .tip {
    color: var(--te-page-manage-tip-text-color);
    margin-top: 4px;
    margin-bottom: 12px;
    font-size: 11px;
    line-height: 16px;
    span {
      color: var(--te-page-manage-tip-text-color);
    }
    .home-page {
      display: inline-block;
    }
  }
  .tiny-button {
    max-width: 300px;
    max-height: 50px;
    height: 33px;
    padding: 0px 20px;
    margin-top: 12px;
    display: flex;
    align-items: center;
    .icon-home {
      display: inline-block;
      margin-right: 8px;
    }
  }
}
</style>