// pages/star/star.js
const { imgName } = require('../../lib/util.js')
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    score: { // 属性名
      type: Number, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: 5, // 属性初始值（可选），如果未指定则会根据类型选择一个
      observer: function (newVal, oldVal) {
        this.setData({
          selfScore: newVal
        })
        this._setStar()
      } // 属性被改变时执行的函数（可选），也可以写成在methods段中定义的方法名字符串, 如：'_propertyChange'
    },
    edit:{
      type: Boolean, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: false, // 属性初始值（可选），如果未指定则会根据类型选择一个
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    selfScore:5,
    starList:[
      imgName('score2.png'),
      imgName('score2.png'),
      imgName('score2.png'),
      imgName('score2.png'),
      imgName('score2.png')
    ]
  },

  /**
   * 组件的方法列表
   */
  methods: {
    //点击改变分数的函数
    changeScore(e){
      // var myEventDetail = {} // detail对象，提供给事件监听函数
      // var myEventOption = {} // 触发事件的选项
      if(!this.data.edit) return
      this.setData(
        {
          selfScore:Number(e.target.id)+1
        }
      )
      this._setStar()
      this.triggerEvent('scoreChange', { score: this.data.selfScore})
    },
    _setStar(){
      let newVal=this.data.selfScore
      let starList = null
      if (parseInt(newVal) != newVal) {
        starList = this.data.starList.map((item, index) => {
          if (index + 1 <= newVal) {
            return item
          } else {
            if (index + 1 == parseInt(newVal) + 1) {
              return imgName('score1.png')
            } else {
              return imgName('score0.png')
            }
          }
        })
      } else {
        starList = this.data.starList.map((item, index) => {
          if (index + 1 <= newVal) {
            return imgName('score2.png')
          } else {
            return imgName('score0.png')
          }
        })
      }
      this.setData({
        starList,
      })
    }
  }
})
