<script lang="ts" setup>
import { Connection, Picture as IconPicture } from '@element-plus/icons-vue'
import { FsPage, useFs } from '@fast-crud/fast-crud'
import { storeToRefs } from 'pinia'
import { nextTick, onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { getCardData, getLineData, getLineMonthData, getLineWeekData } from './api'
import { createCrudOptions } from './crud'
import DataCompare from '/@/components/dataCompare/index.vue'
import { usePublicData } from '/@/stores/publicData'
import { useShopInfo } from '/@/stores/shopInfo'
import DataTendencyChart from '/@/views/adManage/sd/chartComponents/dataTendency.vue'
import { SdMatchedDeliveryColumn } from '/@/views/adManage/utils/commonTabColumn'
import { sdTypeMap, sdtargetMap } from '/@/views/adManage/utils/enum'

const tabActiveName = ref('dataTendency')
const shopInfo = useShopInfo()
const publicData = usePublicData()
const { dateRange } = storeToRefs(publicData)
const { profile } = storeToRefs(shopInfo)
const queryParams = ref({
  profileId: profile.value.profile_id,
  dateRange,
})

const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context: queryParams })
const route = useRoute()
const router = useRouter()
const adStructChartRef = ref()
const dataTendencyRef = ref()
const showCompare = ref(false)

onMounted(() => {
  crudExpose.doRefresh()
})

const jumpGroup = (row: any) => {
  router.push({
    name: 'CampaignDetail',
    query: { campaignId: row.campaignId, tagsViewName: row.campaignName },
  })
}

const resizeTabChart = () => {
  if (tabActiveName.value === 'dataTendency') {
    dataTendencyRef.value.resizeChart()
  } else if (tabActiveName.value === 'adStruct') {
    adStructChartRef.value.resizeChart()
  }
}
const changeTab = () => {
  nextTick(() => {
    resizeTabChart()
  })
}
defineExpose({ resizeTabChart })

watch(
  queryParams,
  async () => {
    crudExpose.doRefresh()
  },
  { deep: true }
)
</script>

<template>
  <fs-page class="fs-page-custom">
    <fs-crud ref="crudRef" v-bind="crudBinding">
      <template #header-middle>
        <el-tabs v-model="tabActiveName" class="chart-tabs" type="border-card" @tab-change="changeTab">
          <el-tab-pane label="数据趋势" name="dataTendency">
            <DataTendencyChart
              :query="queryParams"
              v-if="tabActiveName === 'dataTendency'"
              :fetchCard="getCardData"
              :fetch-line-month="getLineMonthData"
              :fetch-line-week="getLineWeekData"
              :fetchLine="getLineData"></DataTendencyChart>
          </el-tab-pane>
          <!-- <el-tab-pane label="广告结构" name="adStruct">
            <AdStructChart v-if="tabActiveName === 'adStruct'" />
          </el-tab-pane> -->
          <el-tab-pane label="散点视图" name="scatterView"></el-tab-pane>
        </el-tabs>
      </template>
      <template #cell_percentTimeInBudget="scope">
        <el-progress :percentage="scope.row.percentTimeInBudget > 0 ? scope.row.percentTimeInBudget * 100 : 0" />
      </template>

      <template #cell_expression="{ row }">
        <div style="display: flex">
          <img class="img-part" v-if="row.expression[0].image" :src="row.expression[0].image" alt="" />
          <el-image v-else class="img-part">
            <template #error>
              <div class="image-slot">
                <el-icon><icon-picture /></el-icon>
              </div>
            </template>
          </el-image>
          <div class="right-part">
            <div v-for="(expr, index) in row.expression" :key="`expr-${index}`">
              <!-- 对于 type 为 asinSameAs 的特殊处理 -->
              <div v-if="expr.type === 'asinSameAs'">
                <el-tooltip effect="dark" :content="expr.itemName" placement="top-start">
                  <div class="list-item-title">
                    {{ sdtargetMap[expr.type] }}:
                    <span class="title-font">
                      {{ expr.itemName ? expr.itemName : '--' }}
                    </span>
                  </div>
                </el-tooltip>
                <div>
                  ASIN: 
                  <span class="value-font">
                    {{ expr.value ? expr.value : '--' }}
                  </span>
                  <span>
                    <el-link
                      :href="expr.amazon_url"
                      target="_blank"
                      :disabled="!expr.amazon_url"
                      :underline="false"
                      :icon="Connection"
                      :style="{ marginLeft: '8px', color: expr.amazon_url ? '#3a83f7' : '#c0c4cc' }">
                    </el-link>
                  </span>
                </div>
              </div>
              <!-- 对于包含 value 数组的情况 -->
              <div v-else>
                <div v-for="(item, idx) in expr.value" :key="`item-${idx}`" class="list-other-type">
                  <el-tooltip effect="dark" :content="item.value" placement="top-start">
                    <div>
                      {{ sdtargetMap[item.type] || item.type }}: <span class="value-font">{{ item.value ? item.value : '--' }}</span>
                    </div>
                  </el-tooltip>
                </div>
              </div>
            </div>
          </div>
        </div>
      </template>

      <template #cell_matchedTargetAsin="scope">
        <el-tooltip effect="dark" :content="scope.row.matchedTargetAsin" placement="top">
          <el-link type="primary" :underline="false" @click="jumpGroup(scope.row)">
            <div class="en-text">{{ scope.row.matchedTargetAsin }}</div>
          </el-link>
        </el-tooltip>
      </template>
      <template #cell_campaignName="scope">
        <el-tooltip effect="dark" :content="scope.row.campaignName" placement="top">
          <el-link type="primary" :underline="false" @click="jumpGroup(scope.row)">
            <div class="en-text">{{ scope.row.campaignName }}</div>
          </el-link>
        </el-tooltip>
      </template>
      <template #cell_adGroupName="scope">
        <el-tooltip effect="dark" :content="scope.row.adGroupName" placement="top">
          <el-link type="primary" :underline="false" @click="jumpGroup(scope.row)">
            <div class="en-text">{{ scope.row.adGroupName }}</div>
          </el-link>
        </el-tooltip>
      </template>
      <template #cell_suggestedBid="scope">
        <div>{{ scope.row.suggestedBid ? `$${scope.row.suggestedBid}` : '--' }}</div>
        <div class="text-range">
          {{ scope.row.suggestedBid_lower ? `$${scope.row.suggestedBid_lower}` : '--' }} ~
          {{ scope.row.suggestedBid_upper ? `$${scope.row.suggestedBid_upper}` : '--' }}
        </div>
      </template>
      <template #cell_MissedImpressions="scope"> {{ scope.row.MissedImpressionsLower ?? '0' }} ~ {{ scope.row.MissedImpressionsUpper ?? '0' }} </template>
      <template #cell_MissedClicks="scope">{{ scope.row.MissedClicksLower ?? '0' }} ~ {{ scope.row.MissedClicksUpper ?? '0' }}</template>
      <template #cell_MissedSales="scope">{{ scope.row.MissedSalesLower ?? '0' }} ~ {{ scope.row.MissedSalesUpper ?? '0' }}</template>

      <template v-for="field of Object.keys(SdMatchedDeliveryColumn)" #[`cell_${field}`]="scope">
        <DataCompare
          :field="field"
          :value="scope.row[field]"
          :prev-val="scope.row[`prev${field}`]"
          :gap-val="scope.row[`gap${field}`]"
          :date-range="dateRange"
          :show-compare="showCompare" />
      </template>
      <template #toolbar-left>
        <div class="campare-switch">
          <span>数据对比</span>
          <el-switch v-model="showCompare" size="small" />
        </div>
      </template>
    </fs-crud>
  </fs-page>
</template>

<style lang="scss" scoped>
.campare-switch {
  flex: none;
}

::v-deep(.el-table__footer-wrapper td.el-table__cell:nth-child(n + 3):nth-child(-n + 6) .cell) {
  display: none;
}

.en-text {
  max-width: 100%;
  font-size: 13px;
  font-weight: 420;
  color: #326cd9;
  word-break: break-word;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
}

::v-deep(.el-table__footer-wrapper) {
  border: 0;
}

::v-deep(.el-table .el-table__footer-wrapper .cell) {
  font-weight: 600;
}

.text-range {
  color: #808184;
}

.ellipsis {
  max-width: 100%;
  font-size: 13px;
  font-weight: 420;
  word-break: break-word;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
}

.ellipsis-inline {
  max-width: 100%;
  font-size: 13px;
  font-weight: 420;
  word-break: break-word;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
  display: inline;
  -webkit-line-clamp: 1;
  -webkit-box-orient: vertical;
}

::v-deep(span.el-link__inner) {
  white-space: nowrap;
  text-overflow: ellipsis;
  display: inline;
}

.img-part {
  min-width: 65px;
  height: 65px;
  margin: 0 5px 0 0;
  border: 1px solid #e5e6eb;
  border-radius: 4px;
}
.image-slot {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 65px;
  height: 65px;
  background: var(--el-fill-color-light);
  color: var(--el-text-color-secondary);
  font-size: 30px;
}
.image-slot .el-icon {
  font-size: 30px;
}

.list-item-title {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}
.title-font {
  font-weight: 500;
  color: #1d2129;
}
.list-other-type {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
}
.value-font {
  color: #000;
}
</style>
