<script>
import AjaxLoader from './AjaxLoader.vue'
import CommonMixins from '../mixins/CommonMixins'
import { mailbox } from '../stores/mailbox'

export default {
    mixins: [CommonMixins],

    components: {
        AjaxLoader,
    },

    emits: ['loadMessages'],

    data() {
        return {
            mailbox,
        }
    },

    methods: {
        loadMessages: function () {
            this.$emit('loadMessages')
        },

        // mark selected messages as read
        markSelectedRead: function () {
            let self = this
            if (!mailbox.selected.length) {
                return false
            }
            self.put(self.resolve(`/api/v1/messages`), { 'read': true, 'ids': mailbox.selected }, function (response) {
                window.scrollInPlace = true
                self.loadMessages()
            })
        },

        isSelected: function (id) {
            return mailbox.selected.indexOf(id) != -1
        },

        // mark selected messages as unread
        markSelectedUnread: function () {
            let self = this
            if (!mailbox.selected.length) {
                return false
            }
            self.put(self.resolve(`/api/v1/messages`), { 'read': false, 'ids': mailbox.selected }, function (response) {
                window.scrollInPlace = true
                self.loadMessages()
            })
        },

        // universal handler to delete current or selected messages
        deleteMessages: function () {
            let ids = []
            let self = this
            ids = JSON.parse(JSON.stringify(mailbox.selected))
            if (!ids.length) {
                return false
            }
            self.delete(self.resolve(`/api/v1/messages`), { 'ids': ids }, function (response) {
                window.scrollInPlace = true
                self.loadMessages()
            })
        },

        // test if any selected emails are unread
        selectedHasUnread: function () {
            if (!mailbox.selected.length) {
                return false
            }
            for (let i in mailbox.messages) {
                if (this.isSelected(mailbox.messages[i].ID) && !mailbox.messages[i].Read) {
                    return true
                }
            }
            return false
        },

        // test of any selected emails are read
        selectedHasRead: function () {
            if (!mailbox.selected.length) {
                return false
            }
            for (let i in mailbox.messages) {
                if (this.isSelected(mailbox.messages[i].ID) && mailbox.messages[i].Read) {
                    return true
                }
            }
            return false
        },
    }
}
</script>

<template>
    <template v-if="mailbox.selected.length">
        <button class="list-group-item list-group-item-action" :disabled="!selectedHasUnread()"
            v-on:click="markSelectedRead">
            <i class="bi bi-eye-fill me-1"></i>
            Mark read
        </button>
        <button class="list-group-item list-group-item-action" :disabled="!selectedHasRead()"
            v-on:click="markSelectedUnread">
            <i class="bi bi-eye-slash me-1"></i>
            Mark unread
        </button>
        <button class="list-group-item list-group-item-action" v-on:click="deleteMessages()">
            <i class="bi bi-trash-fill me-1 text-danger"></i>
            Delete selected
        </button>
        <button class="list-group-item list-group-item-action" v-on:click="mailbox.selected = []">
            <i class="bi bi-x-circle me-1"></i>
            Cancel selection
        </button>
    </template>

    <AjaxLoader :loading="loading" />
</template>