<template>
    <div id="update-email-container" :class>
        <form method="post" v-on:submit.prevent="submitForm">
            <div class="content-box">
                <h2 class="mb-6 text-grey-darkest font-medium">{{ $t('dashboard.account.email.title') }}</h2>
                <div>
                    <label for="grid-email" class="input-label">{{ $t('strings.email_address') }}</label>
                    <input id="grid-email" name="email" type="email" class="input" required
                           :class="{ error: errors.has('email') }"
                           v-validate
                           v-model="email"
                    >
                    <p class="input-help error" v-show="errors.has('email')">{{ errors.first('email') }}</p>
                </div>
                <div class="mt-6">
                    <label for="grid-password" class="input-label">{{ $t('strings.password') }}</label>
                    <input id="grid-password" name="password" type="password" class="input" required
                        v-model="password"
                    >
                </div>
                <div class="mt-6 text-right">
                    <button class="btn btn-blue btn-sm text-right" type="submit">{{ $t('strings.save') }}</button>
                </div>
            </div>
        </form>
    </div>
</template>

<script>
    import { isObject, get } from 'lodash';
    import { mapState, mapActions } from 'vuex';

    export default {
        name: 'update-email',
        data: function () {
            return {
                email: get(this.$store.state, 'auth.user.email', ''),
                password: '',
            };
        },
        computed: {
            ...mapState({
                user: state => state.auth.user,
            })
        },
        methods: {
            /**
             * Update a user's email address on the Panel.
             */
            submitForm: function () {
                this.clearFlashes();
                this.updateEmail({
                    email: this.$data.email,
                    password: this.$data.password
                })
                    .finally(() => {
                        this.$data.password = '';
                    })
                    .then(() => {
                        this.success(this.$t('dashboard.account.email.updated'));
                    })
                    .catch(error => {
                        if (!error.response) {
                            this.error(error.message);
                        }

                        const response = error.response;
                        if (response.data && isObject(response.data.errors)) {
                            response.data.errors.forEach(e => {
                                this.error(e.detail);
                            });
                        }
                    });
            },

            ...mapActions('auth', [
                'updateEmail',
            ])
        }
    };
</script>