﻿"use strict";

// Rules service
// This service will be specific to every judge show, it's so we can apply specific logic to a show without having to
// pollute the base code with rules from every show
app.factory("judgeRulesService", ['$rootScope', '$log', 'configDataService', function ($rootScope, $log, configDataService) {
    var judgeRulesFactory = {};
    judgeRulesFactory.hideForgotPassword = false;
    judgeRulesFactory.hideDetailsCategories = [];
    judgeRulesFactory.showHelp = true;
    judgeRulesFactory.forceProfilePage = $rootScope.forceProfilePage;

    var _appConfig = function () {
        return configDataService.getAppConfig();
    }

    var _showAddToPlaylist = function (category) {
        return true;
    };
    var _isVideoPlayer = function () {
        return true;
    };
    var _showDetails = function (category) {
        var categoriesWithDetails = ["10", "1", "2", "3", "4", "30", "50", "6", "7", "8", "9"];
        if (categoriesWithDetails.indexOf(category.categoryNumber) > -1) return true;
        else return false;
    };
    var _showCasinoDetails = function (category) {
        var casinoCategories = ["16", "17"];
        if (casinoCategories.indexOf(category.categoryNumber) > -1) return true;
        else return false;
    }
    var _getStarRatingLabel = function (value) {
        return "";
    };
    var _getCategoryName = function (category) {
        return category.name;
    };
    var _hideChangePassword = function () {
        return true;
    };
    var _showUserProfile = function () {
        return true;
    };
    var _hideLink = function () {

        //if ($rootScope.length > 0 && $rootScope.membershipTypeID == 4) {
        //    //$rootScope.forceProfilePage = false;
        //}
        //else if ($rootScope.length > 0 && $rootScope.forceProfilePage) {
        //    //$rootScope.forceProfilePage = true;
        //    //$location.path('/profile');
        //}


        // MemberTypeIDs: 1 (Individual); 2 (Company); 3 (Unknown); 4 (Judge)
        if ($rootScope.forceProfilePage && $rootScope.membershipTypeID != 4) {
            return false;
        }

        return true;
    };

    var _hideSignup = function () {
        if ($rootScope.hideSignUpPanel) {
            return true;
        }

        return false;
    };

    var _showPlayer = function () {
        return true;
    };
    
    var _hideCategoryList = function () {
        return true;
    };

    var _getThirdName = function (nomineeDetails) {
        var result = "";
        if (!$.awards.is.nullOrEmpty(nomineeDetails)) {
            var $xml = $(nomineeDetails);
            result = $xml.find("ThirdName").text();
        }
        return result;
    };

    function _getBio(nomineeDetails) {
        var result = "";
        if (!$.awards.is.nullOrEmpty(nomineeDetails)) {
            var $xml = $(nomineeDetails);
            result = $xml.find("Bio").text();
        }
        return result;
    }

    function _getXmlFieldValue(xml, key) {
        var result = "";
        if (!$.awards.is.nullOrEmpty(xml)) {
            var $xml = $(xml);
            result = $xml.find(key).text();
        }
        return result;
    }

    var _showUrlErrorMessages = function () {
        var message = "This content is only available to stream in the United States or the media URL could not be loaded.<br/>If you believe this message is in error, please contact support <b>1-866-992-9902</b> to resolve this issue";
        var $modal = $("#TeeOhEmPopupModal");
        if ($modal.is(":visible")) {
            if ($modal.find("[url-error-message]").length == 0) {
                $modal.find(".modal-body").append("<hr/><div url-error-message>{0}</div>".format(message));
            }
        }
        else {
            $.awards.alert({
                title: "Error",
                message: "<div url-error-message>{0}</div>".format(message),
                okText: "Close"
            });
        }
    };

    /**
    * The columns for categorySubmissions page.
    * @param categoryNumber {string}
    */
    function _getSubmissionColumns(categoryNumber, isSingleColumn) {

        var artistTitleHeaders = {
            nameColumn1: "Title",
            nameColumn2: "Artist",
            nameCount: 2
        };

        var singleColumnHeaders = {
            nameColumn1: "Title",
            nameColumn2: "Artist(s)",
            nameColumn3: "Producer",
            nameColumn4: "Record Label",
            nameCount: 4
        };

        var MultiColumnHeaders = {
            nameColumn1: "Title",
            nameColumn2: "Artist(s)",
            nameCount: 2
        };

        switch (categoryNumber) {
            case "11":
            case "12":
            case "32":
            case "33":
            case "38":
            case "39":
            case "40":
            case "41":
            case "42":
            case "43":
            case "44":
            case "45":
            case "49":
                return {
                    nameColumn1: "Artist",
                    nameCount: 1
                };
            case "14":
            case "15":
            case "25":
                return isSingleColumn ? singleColumnHeaders : MultiColumnHeaders;
            case "36":
                return {
                    nameColumn1: "Song",
                    nameColumn2: "Artist",
                    nameColumn3: "Composer",
                    nameColumn4: "Publisher",
                    nameCount: 4
                };

            case "13":
            case "34":
            case "35":
                return {
                    nameColumn1: "Artist(s)",
                    nameCount: 1
                };
            case "16":
                return {
                    nameColumn1: "Casino",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "17":
                return {
                    nameColumn1: "Casino",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "18":
                return {
                    nameColumn1: "Festival",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "19":
                return {
                    nameColumn1: "Nightclub",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "20":
                return {
                    nameColumn1: "Venue",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "21":
                return {
                    nameColumn1: "Venue",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "22":
                return {
                    nameColumn1: "Venue",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            case "23":
                return {
                    nameColumn1: "Name",
                    nameColumn2: "Company",
                    nameCount: 2
                };
            case "24":
                return {
                    nameColumn1: "Name",
                    nameColumn2: "Company",
                    nameCount: 2
                };
            case "10":
                return artistTitleHeaders;
            case "1":
            case "2":
            case "3":
            case "4":
            case "30":
                return {
                    nameColumn1: "On-Air Personality Name(s)",
                    nameCount: 1
                };
            case "50":
                return {
                    nameColumn1: "On-Air Personality Name(s)",
                    nameCount: 1
                };
            case "6":
            case "7":
            case "8":
            case "9":
                return {
                    nameColumn1: "Call Letters - AM/FM",
                    nameCount: 1
                };
            case "37":
                return {
                    nameColumn1: "Songwriter",
                    nameCount: 1
                };
            case "31":
            case "46":
            case "47":
            case "48":
                return {
                    nameColumn1: "Venue",
                    nameColumn2: "Location",
                    nameCount: 2
                };
            default:
                return null;
        }
    }

    function _showIndividualCriteriaVoteSubmitButtons() {
        return false;
    }

    var _resetForceProfilePage = function () {
        configDataService.getAppConfig().then(function (res) { $rootScope.forceProfilePage = res.data.forceProfilePage; });
    };


    judgeRulesFactory.getSubmissionColumns = _getSubmissionColumns;
    judgeRulesFactory.showDetails = _showDetails;
    judgeRulesFactory.showCasinoDetails = _showCasinoDetails;
    judgeRulesFactory.showAddToPlaylist = _showAddToPlaylist;
    judgeRulesFactory.isVideoPlayer = _isVideoPlayer;
    judgeRulesFactory.getStarRatingLabel = _getStarRatingLabel;
    judgeRulesFactory.getCategoryName = _getCategoryName;
    judgeRulesFactory.hideChangePassword = _hideChangePassword;
    judgeRulesFactory.showUserProfile = _showUserProfile;
    judgeRulesFactory.hideLink = _hideLink;
    judgeRulesFactory.showPlayer = _showPlayer;
    judgeRulesFactory.showUrlErrorMessages = _showUrlErrorMessages;
    judgeRulesFactory.hideCategoryList = _hideCategoryList;
    judgeRulesFactory.getThirdName = _getThirdName;
    judgeRulesFactory.getBio = _getBio;
    judgeRulesFactory.getXmlFieldValue = _getXmlFieldValue;
    judgeRulesFactory.appConfig = _appConfig;
    judgeRulesFactory.hideSignup = _hideSignup;
    judgeRulesFactory.showIndividualCriteriaVoteSubmitButtons = _showIndividualCriteriaVoteSubmitButtons;
    judgeRulesFactory.resetForceProfilePage = _resetForceProfilePage;
    return judgeRulesFactory;
}]);