<template>
  <div class="right-item">
    <span class="title">数据源模板</span>
    <div class="tips">
      <span class="blue">蓝色框代表对象数组</span>
      <span class="green">绿色框代表树形对象</span>
    </div>
    <ul class="templates">
      <li v-for="template in state.templates" :key="template.name">
        <tiny-button :type="templateType(template.type)" plain @click="selectTemplate(template.id)">{{
          template.name
        }}</tiny-button>
      </li>
    </ul>
  </div>
</template>

<script lang="ts">
/* metaService: engine.plugins.collections.DataSourceTemplate */
import { reactive, onMounted } from 'vue'
import { Button } from '@opentiny/vue'
import { getMergeMeta } from '@opentiny/tiny-engine-meta-register'
import { fetchTemplates } from './js/http'

export default {
  components: {
    TinyButton: Button
  },
  emits: ['select'],
  setup(props, { emit }) {
    const platformId = getMergeMeta('engine.config')?.platformId

    const state = reactive({
      templates: []
    })

    const templateType = (type) => (type === 'array' ? 'success' : 'primary')

    const selectTemplate = (templateId) => {
      emit('select', templateId)
    }

    onMounted(() => {
      fetchTemplates(platformId).then((data) => {
        state.templates = data
      })
    })

    return {
      state,
      templateType,
      selectTemplate
    }
  }
}
</script>

<style lang="less" scoped>
.right-item {
  padding: 16px 12px;
  color: var(--te-datasource-toolbar-icon-color);
  border-bottom: 1px solid var(--te-datasource-tabs-border-color);

  .tips {
    margin-bottom: 16px;
    font-size: 12px;
    color: var(--te-datasource-toolbar-breadcrumb-text-color);
    span {
      &::before {
        content: '';
        display: inline-block;
        width: 24px;
        height: 14px;
        border-radius: 2px;
        margin-right: 6px;
        vertical-align: middle;
      }
      &:last-child {
        margin-left: 16px;
      }
    }
    .blue::before {
      border: 1px solid var(--te-datasource-json-border-color);
    }

    .green::before {
      border: 1px solid var(--te-datasource-tree-border-color);
    }
  }
  .title {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 15px;
    line-height: 22px;
    font-weight: 500;
    margin-bottom: 10px;
  }
  .templates {
    li {
      display: inline-block;
      margin-right: 10px;
      margin-bottom: 10px;
    }

    .tiny-button {
      color: var(--te-datasource-toolbar-breadcrumb-text-color);
      &.tiny-button--primary {
        border-color: var(--te-datasource-common-border-color-primary);
      }

      &.tiny-button--success {
        border-color: var(--te-datasource-common-border-color-success);
      }
      &:hover {
        color: var(--te-datasource-toolbar-icon-color);
        background-color: transparent;
      }
    }
  }
}
</style>