<template lang='pug'>
  v-toolbar.radius-7(flat, :color='$vuetify.dark ? "grey darken-4-l3" : "grey lighten-3"')
    .body-2.mr-3 {{$t('common:duration.every')}}
    v-text-field(
      solo
      hide-details
      flat
      reverse
      v-model='minutes'
    )
    .body-2.mx-3 {{$t('common:duration.minutes')}}
    v-divider.mr-3()
    v-text-field(
      solo
      hide-details
      flat
      reverse
      v-model='hours'
    )
    .body-2.mx-3 {{$t('common:duration.hours')}}
    v-divider.mr-3()
    v-text-field(
      solo
      hide-details
      flat
      reverse
      v-model='days'
    )
    .body-2.mx-3 {{$t('common:duration.days')}}
    v-divider.mr-3()
    v-text-field(
      solo
      hide-details
      flat
      reverse
      v-model='months'
    )
    .body-2.mx-3 {{$t('common:duration.months')}}
    v-divider.mr-3()
    v-text-field(
      solo
      hide-details
      flat
      reverse
      v-model='years'
    )
    .body-2.mx-3 {{$t('common:duration.years')}}
</template>

<script>
import _ from 'lodash'
import moment from 'moment'

export default {
  props: {
    value: {
      type: String,
      default: 'PT5M'
    }
  },
  data() {
    return {
      duration: moment.duration(0)
    }
  },
  computed: {
    years: {
      get() { return this.duration.years() || 0 },
      set(val) { this.rebuild(_.toNumber(val), 'years') }
    },
    months: {
      get() { return this.duration.months() || 0 },
      set(val) { this.rebuild(_.toNumber(val), 'months') }
    },
    days: {
      get() { return this.duration.days() || 0 },
      set(val) { this.rebuild(_.toNumber(val), 'days') }
    },
    hours: {
      get() { return this.duration.hours() || 0 },
      set(val) { this.rebuild(_.toNumber(val), 'hours') }
    },
    minutes: {
      get() { return this.duration.minutes() || 0 },
      set(val) { this.rebuild(_.toNumber(val), 'minutes') }
    }
  },
  watch: {
    value(newValue, oldValue) {
      this.duration = moment.duration(newValue)
    }
  },
  methods: {
    rebuild(val, unit) {
      if (!_.isFinite(val) || val < 0) {
        val = 0
      }
      const newDuration = {
        minutes: this.duration.minutes(),
        hours: this.duration.hours(),
        days: this.duration.days(),
        months: this.duration.months(),
        years: this.duration.years()
      }
      _.set(newDuration, unit, val)
      this.duration = moment.duration(newDuration)
      this.$emit('input', this.duration.toISOString())
    }
  },
  mounted() {
    this.duration = moment.duration(this.value)
  }
}
</script>
