/**
 * @namespace WORKAREA.vimeoApi
 */
WORKAREA.registerModule('vimeoApi', (function () {
    'use strict';

    var getIframe = function(player_id) {
            return $('#'+player_id);
        },

        getLabel = function(iframe) {
            var iframeSrc = iframe.attr('src').split('?')[0],
                label = iframeSrc;

            if (iframe.data('title')) {
                label += ' (' + iframe.data('title') + ')';
            } else if (iframe.attr('title')) {
                label += ' (' + iframe.attr('title') + ')';
            }

            return label;
        },

        sendEvent = function (id, action) {
            var iframe = getIframe(id),
                label = getLabel(iframe);

            WORKAREA.analytics.fireCallback(
                'vimeo',
                {
                    'eventCategory': 'Vimeo',
                    'eventAction': action,
                    'eventLabel': label,
                    'eventValue': undefined
                }
            );
        },

        muteVideo = function (player) {
            player.setVolume(0);
        },

        onPlay = function (playerData) {
            sendEvent(playerData.player_id, 'Play Video');
        },

        onPause = function (playerData) {
            sendEvent(playerData.player_id, 'Paused video');
        },

        onFinish = function (playerData) {
            sendEvent(playerData.player_id, 'Completed video');
        },

        parseOptions = function (index, iframe) {
            var player = new Vimeo.Player(iframe),
                playerData = $(iframe).data('vimeoApi');

            if (playerData.mute === 'true') {
                muteVideo(player);
            }

            player.on('play', _.partial(onPlay, playerData));
            player.on('pause', _.partial(onPause, playerData));
            player.on('finish', _.partial(onFinish, playerData));
        },

        injectSDK = function($vimeoIframes) {
            $.getScript('https://player.vimeo.com/api/player.js', function() {
                $vimeoIframes.each(parseOptions);
            });
        },

        init = function ($scope) {
            var $vimeoIframes = $('[data-vimeo-api]', $scope);

            if (_.isEmpty($vimeoIframes)) { return; }

            injectSDK($vimeoIframes);
        };

    return {
        init: init
    };
}()));