<template>
  <view
    :class="{ text: styleType === 'text' }"
    :style="{ borderColor: styleType === 'text' ? '' : activeColor }"
    class="segmented-control"
  >
    <view
      v-for="(item, index) in values"
      :class="[{ text: styleType === 'text' }, { active: index === currentIndex }]"
      :key="index"
      :style="{
        color:
          index === currentIndex
            ? styleType === 'text'
              ? activeColor
              : '#fff'
            : styleType === 'text'
              ? '#000'
              : activeColor,
        backgroundColor: index === currentIndex && styleType === 'button' ? activeColor : ''
      }"
      class="segmented-control-item"
      @click="_onClick(index)"
    >
      {{ item }}
    </view>
  </view>
</template>

<script>
export default {
  name: 'UniSegmentedControl',
  props: {
    current: {
      type: Number,
      default: 0
    },
    values: {
      type: Array,
      default () {
        return []
      }
    },
    activeColor: {
      type: String,
      default: '#000'
    },
    styleType: {
      type: String,
      default: 'button'
    }
  },
  data () {
    return {
      currentIndex: 0
    }
  },
  watch: {
    current (val) {
      if (val !== this.currentIndex) {
        this.currentIndex = val
      }
    }
  },
  created () {
    this.currentIndex = this.current
  },
  methods: {
    _onClick (index) {
      if (this.currentIndex !== index) {
        this.currentIndex = index
        this.$emit('clickItem', index)
      }
    }
  }
}
</script>

<style lang="scss">
.segmented-control {
	display: flex;
	flex-direction: row;
	justify-content: center;
	width: 75%;
	font-size: 28upx;
	box-sizing: border-box;
	margin: 20px auto;
	overflow: hidden;

	border: 1px solid;
	border-radius: 10upx;

	&.text {
		border: 0;
		border-radius: 0;
	}
}

.segmented-control-item {
	flex: 1;
	text-align: center;
	line-height: 60upx;
	box-sizing: border-box;

	border-left: 1px solid;

	&.active {
		color: #fff;
	}

	&.text {
		border-left: 0;
		color: #000;

		&.active {
			border-bottom-style: solid;
		}
	}

	&:first-child {
		border-left-width: 0;
	}
}
</style>