<template lang="pug">
    li.cart-item(:class="{'cart-item-invalid': !isValid()}")
        h3.item-name {{ item.displayName }}
        input.item-quantity(type='number' min='1' :value='item.quantity' readonly)
        span.item-x x
        span.item-price {{ item.price | currency(...options) }}
        span.item-equals =
        span.item-subtotal {{ (item.price * (item.quantity || 1)) | currency(...options) }}
        .cart-item-options-wrapper
            .cart-item-options
                .cart-item-option(class='fa fa-plus' @click='onClickIncrement')
                .cart-item-option(class='fa fa-minus' @click='onClickDecrement')
                .cart-item-option(class="fa fa-money" @click='onClickMoney')
                .cart-item-option(class='fa fa-trash' @click='onClickDelete')
</template>

<script>
    export default {
        props: {
            index: {
                type: Number,
                default: -1,
                required: true
            },
            item: {
                type: Object,
                default: null
            },
            options: {
                type: Object,
                default: {
                    symbol: '$',
                    position: 'before',
                    thousandsSeparator: '.',
                    decimalPlaces: 2,
                    decimalSeparator: ',' 
                }
            }
        },
        watch: {
            item: {
                handler(value) {
                    this.onChange(value)
                },
                deep: true,
                immediate: true
            }
        },
        methods: {
            onChange(item) {
                this.$emit('onChange', item)
            },
            onClickIncrement() {
                this.$emit('onClickIncrement', this.item)
            },
            onClickDecrement() {
                this.$emit('onClickDecrement', this.item)
            },
            onClickMoney() {
                this.$emit('onClickMoney', this.item)
            },
            onClickDelete() {
                this.$emit('onClickDelete', this.item)
            },
            isValid() {
                return this.item.price > 0
            }
        }
    }
</script>

<style lang="sass">
    @import '../../assets/variables'
    .cart-item
        width: 100%
        height: 90px
        list-style: none outside none
        border-bottom: 1px solid $app-border-color
        box-sizing: border-box
        position: relative
        &.cart-item-invalid
            border-bottom: 2px solid $app-error-color
        &:nth-child(1)
            border-top: 1px solid $app-border-color
        &:hover
            transition-duration: 1000ms
            border-bottom: 2px solid $app-main-color
        .item-name
            width: 100%
            height: 20px
            margin: 10px 0 5px 0
            float: left
            font-size: 8pt
            display: inline-block
        .item-quantity
            width: 50px
            height: 28px
            margin-top: 6px
            text-align: right
            float: left
            display: inline-block
        .item-x
            width: 20px
            height: 20px
            margin-top: 12px
            text-align: right
            float: left
            display: inline-block
        .item-price
            width: 80px
            height: 20px
            margin-top: 12px
            text-align: right
            float: left
            display: inline-block
        .item-equals
            width: 20px
            height: 20px
            margin-top: 12px
            text-align: center
            float: left
            display: inline-block
        .item-subtotal
            width: 100px
            height: 20px
            margin-top: 12px
            text-align: right
            font-weight: bold
            display: inline-block
        .cart-item-options-wrapper
            width: 100%
            height: 20px
            position: absolute
            bottom: 0
            display: flex
            justify-content: center
            .cart-item-options
                width: 100px
                height: 20px
                border: 1px solid #d3d3d3
                border-bottom: none
                display: flex
                justify-content: center
                .cart-item-option
                    width: 18px
                    height: 18px
                    margin: 0 5px
                    color: #666
                    &:hover
                        cursor: pointer
                    &.fa
                        padding-left: 2px
                        line-height: 20px
                        &.fa-plus:hover
                            color: #2196f3
                        &.fa-minus:hover
                            color: #ffc107
                        &.fa-money:hover
                            color: #4caf50
                        &.fa-trash:hover
                            color: #f44336
</style>