define(['actionsheet', 'datetime', 'playbackManager', 'globalize', 'appSettings'], function (actionsheet, datetime, playbackManager, globalize, appSettings) {
    'use strict';

    var isMobileApp = window.Dashboard != null;

    function show(options) {

        var item = options.item;

        var itemType = item.Type;
        var mediaType = item.MediaType;
        var isFolder = item.IsFolder;
        var itemId = item.Id;
        var channelId = item.ChannelId;
        var serverId = item.ServerId;
        var resumePositionTicks = item.UserData ? item.UserData.PlaybackPositionTicks : null;

        var showExternalPlayer = isMobileApp && mediaType === 'Video' && !isFolder && appSettings.enableExternalPlayers();
        var playableItemId = itemType === 'Program' ? channelId : itemId;

        if (!resumePositionTicks && mediaType !== "Audio" && !isFolder && !showExternalPlayer) {
            playbackManager.play({
                ids: [playableItemId],
                serverId: serverId
            });
            return;
        }

        var menuItems = [];

        if (resumePositionTicks) {
            menuItems.push({
                name: globalize.translate('sharedcomponents#ResumeAt', datetime.getDisplayRunningTime(resumePositionTicks)),
                id: 'resume'
            });

            menuItems.push({
                name: globalize.translate('sharedcomponents#PlayFromBeginning'),
                id: 'play'
            });
        } else {
            menuItems.push({
                name: globalize.translate('sharedcomponents#Play'),
                id: 'play'
            });
        }

        if (showExternalPlayer) {
            menuItems.push({
                name: globalize.translate('ButtonPlayExternalPlayer'),
                id: 'externalplayer'
            });
        }

        if (playbackManager.canQueue(item)) {
            menuItems.push({
                name: globalize.translate('sharedcomponents#Queue'),
                id: 'queue'
            });
        }

        if (itemType === "Audio" || itemType === "MusicAlbum" || itemType === "MusicArtist" || itemType === "MusicGenre") {
            menuItems.push({
                name: globalize.translate('sharedcomponents#InstantMix'),
                id: 'instantmix'
            });
        }

        if (isFolder || itemType === "MusicArtist" || itemType === "MusicGenre") {
            menuItems.push({
                name: globalize.translate('sharedcomponents#Shuffle'),
                id: 'shuffle'
            });
        }

        actionsheet.show({

            items: menuItems,
            positionTo: options.positionTo

        }).then(function (id) {
            switch (id) {

                case 'play':
                    playbackManager.play({
                        ids: [playableItemId],
                        serverId: serverId
                    });
                    break;
                case 'externalplayer':
                    LibraryBrowser.playInExternalPlayer(playableItemId);
                    break;
                case 'resume':
                    playbackManager.play({
                        ids: [playableItemId],
                        startPositionTicks: resumePositionTicks,
                        serverId: serverId
                    });
                    break;
                case 'queue':
                    playbackManager.queue(item);
                    break;
                case 'instantmix':
                    playbackManager.instantMix(item);
                    break;
                case 'shuffle':
                    playbackManager.shuffle(item);
                    break;
                default:
                    break;
            }
        });
    }

    return {
        show: show
    };
});