<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>