<template>
  <div class="AiRanking" :class="'AiRanking-' + theme">
    <div class="AiRanking-item" v-for="(item, index) in list" :key="index" :class="'AiRanking-item' + (index + 1)">
      <i>{{ index + 1 }}</i>
      <h2>{{ item.name }}</h2>
      <span>{{ item.value }}</span>
      <div class="AiRanking-item__rate--wrapper">
        <div class="AiRanking-item__rate" :style="{width: item.rate + '%'}">
          <div class="bar">
            <span></span>
            <i></i>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  export default {
    name: 'AiRanking',

    props: {
      data: {
        type: Array,
        default: () => []
      },

      theme: {
        type: String,
        default: '0'
      }
    },

    watch: {
      data: {
        handler (v) {
          this.init(v)
        },
        deep: true,
        immediate: true
      }
    },

    data () {
      return {
        list: []
      }
    },

    methods: {
      init (v) {
        if (!v.length) {
          this.list = []
          return false
        }

        const total = this.sum(v.map(v => v.value))
        this.list = v.map(e => {
          return {
            ...e,
            rate: ((Number(e.value) / total) * 100).toFixed(2)
          }
        })
      },

      sum (arr) {
        return arr.reduce((x, y) => x + y)
      }
    }
  }
</script>

<style lang="scss" scoped>
  .AiRanking {
    height: 100%;
    overflow-y: auto;

    &::-webkit-scrollbar {
      width: 5px;
      height: 14px;
    }

    &::-webkit-scrollbar-corner {
      background: transparent;
    }

    &::-webkit-scrollbar-thumb {
      min-height: 20px;
      background-clip: content-box;
      box-shadow: 0 0 0 5px rgba(116, 148, 170, 0.5) inset;
    }

    &::-webkit-scrollbar-track {
      box-shadow: 1px 1px 5px rgba(116, 148, 170, 0.5) inset;
    }

    * {
      box-sizing: border-box;
    }

    .AiRanking-item {
      display: flex;
      align-items: center;
      height: 36px;
      margin-bottom: 16px;
      padding-right: 18px;
      background: url(./asset/ranking4.png) no-repeat;
      background-size: 100% 100%;

      &.AiRanking-item1 {
        background: url(./asset/ranking1.png) no-repeat;
        background-size: 100% 100%;
      }

      &.AiRanking-item2 {
        background: url(./asset/ranking2.png) no-repeat;
        background-size: 100% 100%;
      }

      &.AiRanking-item3 {
        background: url(./asset/ranking3.png) no-repeat;
        background-size: 100% 100%;
      }

      .AiRanking-item__rate--wrapper {
        flex: 1;
        background: #6F7171;
      }

      .AiRanking-item__rate {
        position: relative;

        .bar {
          position: relative;
          width: calc(100% - 6px);
          height: 6px;
          background: linear-gradient(90deg, #ffbb45ff 0%, #76f7b8ff 98%);

          i {
            position: absolute;
            right: 0;
            top: 50%;
            z-index: 12;
            width: 22px;
            height: 22px;
            border: 1px solid #596269;
            border-radius: 50%;
            transform: translate(50%, -50%);
          }

          span {
            position: absolute;
            right: 0;
            top: 50%;
            z-index: 11;
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background: #e1ffee;
            box-shadow: 0 0 10px 0 #26F0F7;
            transform: translate(50%, -50%);
          }
        }
      }

      i {
        width: 40px;
        text-align: center;
        font-size: 18px;
        color: #fff;
        font-weight: 600;
        font-style: normal;
      }

      h2 {
        width: 90px;
        margin-left: 20px;
        color: #fff;
        font-size: 18px;
        font-family: PingFangSC-Medium, PingFang SC;
        font-weight: normal;
      }

      span {
        width: 90px;
        text-align: left;
        font-size: 18px;
        color: #fff;
      }
    }

    &.AiRanking-1 {
      .AiRanking-item {
        background: url(./asset/ranking4-dj.png) no-repeat;
        background-size: 100% 100%;

        &.AiRanking-item1 {
          background: url(./asset/ranking1-dj.png) no-repeat;
          background-size: 100% 100%;
        }

        &.AiRanking-item2 {
          background: url(./asset/ranking2-dj.png) no-repeat;
          background-size: 100% 100%;
        }

        &.AiRanking-item3 {
          background: url(./asset/ranking3-dj.png) no-repeat;
          background-size: 100% 100%;
        }
        .AiRanking-item__rate--wrapper {
          flex: 1;
          background: #928D7C;
        }

        .AiRanking-item__rate {
          position: relative;

          .bar {
            position: relative;
            width: calc(100% - 6px);
            height: 6px;
            background: linear-gradient(90deg, #ffbb45ff 0%, #ff3e18ff 98%);

            i {
              border: 1px solid #AA9E93;
            }

            span {
              background: #FAB56C;
              box-shadow: 0 0 10px 0 #fab56c;
            }
          }
        }
      }

      &::-webkit-scrollbar {
        width: 5px;
        height: 14px;
      }

      &::-webkit-scrollbar-corner {
        background: transparent;
      }

      &::-webkit-scrollbar-thumb {
        min-height: 20px;
        background-clip: content-box;
        box-shadow: 0 0 0 5px rgba(250, 181, 108, 0.5) inset;
      }

      &::-webkit-scrollbar-track {
        box-shadow: 1px 1px 5px rgba(50, 181, 108, 0.5) inset;
      }
    }
  }
</style>
