export default {
    props: [ 'name', 'href', 'token' ],
    data() { return {showCopied: false} },
    template: `<span class="notif"><div v-if="showCopied">copied!</div><a :href="href" @click="fetchAndSave()">{{name}}</a>&nbsp;<a href="#" class="copy" @click="fetchAndCopy()">&#x1F5D0;</a></span>`,
    methods: {
        fetch() {
            event.preventDefault()
            return fetch(this.href, {
                method: 'GET',
                headers: { 'Authorization': 'Bearer ' + this.token },
            })
        },
        handleFetchError(e) {
            console.log("failed to get value:", e)
            alert('failed to get value')
        },
        fetchAndSave() {
            this.fetch().then(resp => resp.blob()).then((value) => {
                window.open(URL.createObjectURL(value), "_blank")
            }).catch(this.handleFetchError)
        },
        fetchAndCopy() {
            this.fetch()
            .then((resp) => resp.headers.get("content-type") == "application/json" ? resp.json() : resp.text())
            .then((value) => {
                window.navigator.clipboard.writeText(value)
                this.showCopied = true
                setTimeout(() => { this.showCopied = false }, 1000)
            }).catch(this.handleFetchError)
        },
    },
}