<template>
    <b-container>
        <template v-if="selectedShow">
            <show-selector
                ref="showSelector"
                :title="$t('filePlaylistManager.title')"
                :callback="showHasSwitched"
            />
            <hr>

            <jumbotron />

            <!-- All the UI for uploading and editing files is only shown if the user
            choose to edit files in the jumbotron above -->
            <div v-if="mode === 'files'">
                <files />
            </div>

            <!-- All the UI for creating and editing playlists is only shown if the user
            choose to edit playlists in the jumbotron above -->
            <div v-if="mode === 'playlists'">
                <playlists />
            </div>
        </template>

        <div
            v-else-if="loaded.shows && !selectedShow"
            class="tw-text-center"
            v-html="$t('noAssignedShows', { adminUrl })"
        />
    </b-container>
</template>

<script>
    import {mapGetters} from 'vuex'
    import showSelector from '../components/ShowSelector.vue'
    import jumbotron from '../components/filemanager/Jumbotron.vue'
    import files from '../components/filemanager/Files.vue'
    import playlists from '../components/filemanager/Playlists.vue'

    export default {
        components: {
            'show-selector': showSelector,
            'jumbotron': jumbotron,
            'files': files,
            'playlists': playlists,
        },

        // the data this component will be handling: mostly flags and local versions
        // of the data fetched from the AuRa tank API
        data() {
            return {
                adminUrl: `${import.meta.env.VUE_APP_BASEURI_STEERING}/admin`,

                // for formatting the buttons - this way we could customize it later
                button: {
                    files: 'info',
                    playlists: 'outline-info'
                },

            }
        },

        computed: {
            ...mapGetters({
                selectedShow: 'shows/selectedShow',
                mode: 'fileManagerMode'
            })
        },

        // Right after this component is set up, we want to fetch all available shows
        // from the AuRa tank module. This works quite similar to the ShowManager.
        // We also want to load the files and playlists as soon as the shows are
        // loaded.
        created() {
            this.$store.dispatch('shows/fetchShows', {
                callback: () => {
                    if (!this.selectedShow) {
                        return
                    }

                    this.$nextTick(() => {
                        this.showHasSwitched()
                        this.$refs.showSelector.updateInputSelector()
                    })
                }
            })
        },

        // Now for our hotchpotch of methods, mostly for fetching data from and
        // posting/updating data to the AuRa tank API
        methods: {

            // This switches the UI elements to reflect another show and fetches all
            // relevent data from the tank API.
            showHasSwitched() {
                this.$store.dispatch('files/fetchFiles', {
                    slug: this.selectedShow.slug
                })
                this.$store.dispatch('playlists/fetch', {
                    slug: this.selectedShow.slug
                })
            },

        }
    }
</script>

<style>
    div.filelistbox {
        border: 1px solid #e9ecef;
        border-radius: 0.3rem;
        padding: 1rem 2rem;
    }

    .stateNew {
        color: red;
        font-weight: bold;
    }

    .stateRunning {
        color: darkgreen;
    }

    .stateUndefined {
        color: orange;
        font-weight: bold;
    }

    .upDownArrows {
        font-size: 1.15rem;
    }

    .modalPlaylistRows {
        padding: 0.2rem 0;
    }
</style>