import { load as load_template } from './templates';
import Mustache from 'mustache';

import * as mediaplayer from './agl_stubs_mediaplayer';

var template;
var root;
var page = {
    metadata: {},
    isLooping: false,
    getPosition: function() {
        if ( this.metadata && this.metadata.position ) {
            return formatTime(this.metadata.position);
        } else {
            return '--:--';
        }
    },
    getDuration: function(){
        if ( this.metadata && this.metadata.track && this.metadata.track.duration ) {
            return formatTime(this.metadata.track.duration);
        } else {
            return '--:--';
        }
    },
    getPercentage: function() {
        if ( this.metadata && this.metadata.position && this.metadata.track && this.metadata.track.duration) {
            return Math.floor((this.metadata.position/this.metadata.track.duration)*100);
        }
    },
    isPlaying: function() {
        return this.metadata && this.metadata.status === 'playing';
    }
};

function twoDigit(number) {
    if( number < 10 ) {
        return '0'+number;
    } else {
        return number;
    }
}

function formatTime(time) {
    return twoDigit(Math.floor(time/60000))+':'+twoDigit(Math.floor((time/1000)%60));
}

export function show() {
    root.innerHTML = Mustache.render(template, page);
}

export function init(node) {

    mediaplayer.on_metadata_changes(function(metadata){
        console.log(metadata);
        page.metadata = metadata;
        show();
    });
    load_template('player.template.html').then(function(result) {
        template = result;
        root = node;
        Mustache.parse(template);
        show();
    }, function(error) {
        console.error('ERRROR loading main template', error);
    });
}

export function loop() {
    if( !page.isLooping ) {
        mediaplayer.loop('track').then(function() {
            page.isLooping = true;
            show();
        });
    } else {
        mediaplayer.loop('playlist').then(function() {
            page.isLooping = false;
            show();
        });
    }
}

export function play(trackIndex) {
    if( trackIndex ) {
        mediaplayer.pickTrack(trackIndex);
    } else {
        mediaplayer.play();
    }
}

export function pause() {
    mediaplayer.pause();
}

export function previous() {
    mediaplayer.previous();
}

export function next() {
    mediaplayer.next();
}

export function seek(node, event) {
    /*
     * The -15 is to adjust the default margin.
     */
    var position = Math.round(page.metadata.track.duration * ((event.pageX-15)/node.clientWidth));
    mediaplayer.play().then(function() {
        mediaplayer.seek(position);
    });
}