<template>
    <v-card class="bg-gradient" style="height: 100%">
        <v-card-text class="d-flex justify-center align-center">
            <v-card class="align-center justify-center h-auto w-33">
                <v-card-title>Вставьте ссылку:</v-card-title>
                <v-card-text class="d-flex flex-column justify-center">
                    <v-text-field v-model="url" label="Ссылка" :loading="fetching">
                    </v-text-field>
                    <v-label v-if="error" class="text-red">{{ hint }}</v-label>
                    <div class="d-flex align-center justify-center">
                        <v-btn class="mr-5 ml-5" variant="elevated" color="blue" @click="startDownload">Найти</v-btn>
                        <v-btn v-if="downloadAvailable" :href="downloadLink" target="_blank" class="mr-5 ml-5" variant="elevated" color="blue">Скачать</v-btn>
                    </div>
                </v-card-text>
            </v-card>
        </v-card-text>
    </v-card>
</template>

<script>
import {ref} from "vue";
import axios from "axios";

export default {
    name: "Main",
    data: () => ({
        url: ref(''),
	    fetching: ref(false),
        downloadAvailable: ref(false),
        downloadLink: '',
        hint: ref(''),
        error: ref(false)
    }),
    methods: {
        startDownload(){
            this.downloadAvailable = false;
            this.error = false;
            this.fetching = true;
            axios.get(`/download_api?videourl=${this.url}`).then((responce)=>{
                this.fetching = false;
                if (responce.data.error){
                    this.error = true;
                    this.hint = 'Возникла ошибка';
                    console.log(responce.data.error);
                } else if (responce.data.link){
                    this.downloadAvailable = true;
                    this.downloadLink = `/download/${responce.data.link}`;
                }
            }).catch((error)=>{
                this.fetching = false;
                console.log(error);
                this.error = true;
                this.hint = 'Возникла ошибка';
            })
        }
    }
}
</script>


<style scoped>

.bg-gradient {
    background: linear-gradient(-45deg, #f103b0, #f0a068, #4fdbfeff);
    background-size: 200% 200%;
    animation: gradient 15s ease infinite;
    height: 100vh;
}

@keyframes gradient {
    0% {
        background-position: 0 50%;
    }
    50% {
        background-position: 100% 50%;
    }
    100% {
        background-position: 0 50%;
    }
}

</style>
