import AdminApp from '../admin';
import Model from '../model';
import Sound from '../sound';
import {setEcoInterval} from '../utils';

import {Streamer, Queue} from './controllers';


export default {
    ...AdminApp,

    props: {
        ...(AdminApp.props || {}),
        apiUrl: String,
    },

    data() {
        return {
            // current streamer
            streamer: null,
            // all streamers
            streamers: [],
            // fetch interval id
            fetchInterval: null,
            Sound: Sound,
        }
    },

    computed: {
        ...(AdminApp.computed || {}),

        sources() {
            var sources = this.streamer ? this.streamer.sources : [];
            return sources.filter(s => s.data)
        },
    },

    methods: {
        ...(AdminApp.methods || {}),

        fetchStreamers() {
            Streamer.fetch(this.apiUrl, {many:true}).then(streamers => {
                this.streamers = streamers
                this.streamer = streamers ? streamers[0] : null
            })
        },
    },

    mounted() {
        this.fetchStreamers();
        this.fetchInterval = setEcoInterval(() => this.streamer && this.streamer.fetch(), 5000)
    },

    destroyed() {
        if(this.fetchInterval !== null)
            clearInterval(this.fetchInterval)
    }
}
