define(['backdrop', 'userSettings', 'libraryMenu'], function (backdrop, userSettings, libraryMenu) {
    'use strict';

    var cache = {};

    function enabled() {
        return userSettings.enableBackdrops();
    }

    function getBackdropItemIds(apiClient, userId, types, parentId) {
        var key = `backdrops2_${userId + (types || '') + (parentId || '')}`;
        var data = cache[key];

        if (data) {
            console.debug(`Found backdrop id list in cache. Key: ${key}`);
            data = JSON.parse(data);
            return Promise.resolve(data);
        }

        var options = {
            SortBy: 'IsFavoriteOrLiked,Random',
            Limit: 20,
            Recursive: true,
            IncludeItemTypes: types,
            ImageTypes: 'Backdrop',
            ParentId: parentId,
            EnableTotalRecordCount: false
        };
        return apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) {
            var images = result.Items.map(function (i) {
                return {
                    Id: i.Id,
                    tag: i.BackdropImageTags[0],
                    ServerId: i.ServerId
                };
            });
            cache[key] = JSON.stringify(images);
            return images;
        });
    }

    function showBackdrop(type, parentId) {
        var apiClient = window.ApiClient;

        if (apiClient) {
            getBackdropItemIds(apiClient, apiClient.getCurrentUserId(), type, parentId).then(function (images) {
                if (images.length) {
                    backdrop.setBackdrops(images.map(function (i) {
                        i.BackdropImageTags = [i.tag];
                        return i;
                    }));
                } else {
                    backdrop.clear();
                }
            });
        }
    }

    pageClassOn('pageshow', 'page', function () {
        var page = this;

        if (!page.classList.contains('selfBackdropPage')) {
            if (page.classList.contains('backdropPage')) {
                if (enabled()) {
                    var type = page.getAttribute('data-backdroptype');
                    var parentId = page.classList.contains('globalBackdropPage') ? '' : libraryMenu.getTopParentId();
                    showBackdrop(type, parentId);
                } else {
                    page.classList.remove('backdropPage');
                    backdrop.clear();
                }
            } else {
                backdrop.clear();
            }
        }
    });
});
