{#
/**
 * Copyright (C) 2020 Xibo Signage Ltd
 *
 * Xibo - Digital Signage - http://www.xibo.org.uk
 *
 * This file is part of Xibo.
 *
 * Xibo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * Xibo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with Xibo.  If not, see <http://www.gnu.org/licenses/>.
 */
#}
{% import "forms.twig" as forms %}

{% block formHtml %}
<div class="row">
    <div class="col-md-12">
        <ul class="nav nav-tabs" role="tablist">
            <li class="nav-item"><a class="nav-link active" href="#general" role="tab" data-toggle="tab">{% trans "General" %}</a></li>
            <li class="nav-item"><a class="nav-link" href="#network" role="tab" data-toggle="tab">{% trans "Network" %}</a></li>
            <li class="nav-item"><a class="nav-link" href="#location" role="tab" data-toggle="tab">{% trans "Location" %}</a></li>
            <li class="nav-item"><a class="nav-link" href="#troubleshooting" role="tab" data-toggle="tab">{% trans "Troubleshooting" %}</a></li>
            <li class="nav-item"><a class="nav-link" href="#advanced" role="tab" data-toggle="tab">{% trans "Advanced" %}</a></li>
            {% if commands|length > 0 %}
                <li class="nav-item"><a class="nav-link" href="#commands" role="tab" data-toggle="tab">{% trans "Commands" %}</a></li>
            {% endif %}
        </ul>
        <form id="displayProfileForm" class="XiboForm form-horizontal" method="put" action="{{ url_for("displayProfile.edit", {id: displayProfile.displayProfileId}) }}">
            <div class="tab-content">
                <div class="tab-pane active" id="general">
                    {{ include('displayprofile-form-edit-common-fields.twig') }}

                    {% set title = "Collect interval"|trans %}
                    {% set helpText = "How often should the Player check for new content."|trans %}
                    {% set options = [
                        { id: 60, value: "1 minute"|trans },
                        { id: 300, value: "5 minutes"|trans },
                        { id: 600, value: "10 minutes"|trans },
                        { id: 1800, value: "30 minutes"|trans },
                        { id: 3600, value: "1 hour"|trans },
                        { id: 5400, value: "1 hour 30 minutes"|trans },
                        { id: 7200, value: "2 hours"|trans },
                        { id: 9000, value: "2 hours 30 minutes"|trans },
                        { id: 10800, value: "3 hours"|trans },
                        { id: 12600, value: "3 hours 30 minutes"|trans },
                        { id: 14400, value: "4 hours"|trans },
                        { id: 18000, value: "5 hours"|trans },
                        { id: 21600, value: "6 hours"|trans },
                        { id: 25200, value: "7 hours"|trans },
                        { id: 28800, value: "8 hours"|trans },
                        { id: 32400, value: "9 hours"|trans },
                        { id: 36000, value: "10 hours"|trans },
                        { id: 39600, value: "11 hours"|trans },
                        { id: 43200, value: "12 hours"|trans },
                        { id: 86400, value: "24 hours"|trans }
                    ] %}
                    {{ forms.dropdown("collectInterval", "single", title, displayProfile.getSetting("collectInterval"), options, "id", "value", helpText) }}

                    {% set title = "XMR WebSocket Address"|trans %}
                    {% set helpText = "Override the CMS WebSocket address for XMR."|trans %}
                    {{ forms.input("xmrWebSocketAddress", title, displayProfile.getSetting("xmrWebSocketAddress"), helpText) }}

                    {% set title = "XMR Public Address"|trans %}
                    {% set helpText = "Override the CMS public address for XMR."|trans %}
                    {{ forms.input("xmrNetworkAddress", title, displayProfile.getSetting("xmrNetworkAddress"), helpText) }}

                    {% set title = "Enable stats reporting?"|trans %}
                    {% set helpText = "Should the application send proof of play stats to the CMS."|trans %}
                    {{ forms.checkbox("statsEnabled", title, displayProfile.getSetting("statsEnabled"), helpText) }}

                    {% set title = "Aggregation level"|trans %}
                    {% set helpText = "Set the level of collection for Proof of Play Statistics to be applied to selected Layouts / Media and Widget items."|trans %}
                    {% set options = [
                        { id: 'Individual', value: "Individual"|trans },
                        { id: 'Hourly', value: "Hourly"|trans },
                        { id: 'Daily', value: "Daily"|trans },
                    ] %}
                    {{ forms.dropdown("aggregationLevel", "single", title, displayProfile.getSetting("aggregationLevel"), options, "id", "value", helpText, "aggregation-level") }}

                    {% set title = "Record geolocation on each Proof of Play?"|trans %}
                    {% set helpText = "If the geolocation of the Display is known, enable to record that location against each proof of play record."|trans %}
                    {{ forms.checkbox("isRecordGeoLocationOnProofOfPlay", title, displayProfile.getSetting("isRecordGeoLocationOnProofOfPlay"), helpText) }}

                    {% set title = "Enable PowerPoint?"|trans %}
                    {% set helpText = "Should Microsoft PowerPoint be Enabled? The Player will need PowerPoint installed to Display PowerPoint files."|trans %}
                    {{ forms.checkbox("powerpointEnabled", title, displayProfile.getSetting("powerpointEnabled"), helpText) }}

                </div>

                <div class="tab-pane" id="network">

                    {% set title = "Download Window Start Time"|trans %}
                    {% set helpText = "The start of the time window to connect to the CMS and download updates."|trans %}
                    {{ forms.time("downloadStartWindow", title, displayProfile.getSetting("downloadStartWindow"), helpText, "", "", "","HH:mm") }}

                    {% set title = "Download Window End Time"|trans %}
                    {% set helpText = "The end of the time window to connect to the CMS and download updates."|trans %}
                    {{ forms.time("downloadEndWindow", title, displayProfile.getSetting("downloadEndWindow"), helpText, "", "", "","HH:mm") }}

                    {% set title = "Force HTTPS?"|trans %}
                    {% set helpText = "Should Displays be forced to use HTTPS connection to the CMS?"|trans %}
                    {{ forms.checkbox("forceHttps", title, displayProfile.getSetting("forceHttps"), helpText) }}

                    {% set title = "Operating Hours"|trans %}
                    {% set helpText = "Select a day part that should act as operating hours for this display - email alerts will not be sent outside of operating hours"|trans %}
                    {% set attributes = [
                        { name: "data-width", value: "300px" },
                        { name: "data-allow-clear", value: "true" },
                        { name: "data-placeholder--id", value: null },
                        { name: "data-placeholder--value", value: "" },
                        { name: "data-search-url", value: url_for("daypart.search") },
                        { name: "data-search-term", value: "name" },
                        { name: "data-id-property", value: "dayPartId" },
                        { name: "data-text-property", value: "name" },
                        { name: "data-filter-options", value: '{"isAlways":"0", "isCustom":"0"}' }
                    ] %}
                    {{ forms.dropdown("dayPartId", "single", title, displayProfile.getSetting("dayPartId"), [{dayPartId:null, name:""}]|merge(dayParts), "dayPartId", "name", helpText, "pagedSelect", "", "", "", attributes) }}

                    {% set title = "Authentication Whitelist"|trans %}
                    {% set helpText = "A comma separated list of domains which should be allowed to perform NTML/Negotiate authentication."|trans %}
                    {{ forms.input("authServerWhitelist", title, displayProfile.getSetting("authServerWhitelist"), helpText) }}

                    {% set title = "Edge Browser Whitelist"|trans %}
                    {% set helpText = "A comma separated list of website urls which should be rendered by the Edge Browser instead of Chromium."|trans %}
                    {{ forms.input("edgeBrowserWhitelist", title, displayProfile.getSetting("edgeBrowserWhitelist"), helpText) }}
                </div>

                <div class="tab-pane" id="location">

                    {% set title = "Width"|trans %}
                    {% set helpText = "The Width of the Display Window. 0 means full width."|trans %}
                    {{ forms.number("sizeX", title, displayProfile.getSetting("sizeX"), helpText, "", "", "", "", "0") }}

                    {% set title = "Height"|trans %}
                    {% set helpText = "The Height of the Display Window. 0 means full height."|trans %}
                    {{ forms.number("sizeY", title, displayProfile.getSetting("sizeY"), helpText, "", "", "", "", "0") }}

                    {% set title = "Left Coordinate"|trans %}
                    {% set helpText = "The left pixel position the display window should be sized from."|trans %}
                    {{ forms.number("offsetX", title, displayProfile.getSetting("offsetX"), helpText) }}

                    {% set title = "Top Coordinate"|trans %}
                    {% set helpText = "The top pixel position the display window should be sized from."|trans %}
                    {{ forms.number("offsetY", title, displayProfile.getSetting("offsetY"), helpText) }}

                </div>

                <div class="tab-pane" id="troubleshooting">
                    {% set title = "CTRL Key required to access Player Information Screen?"|trans %}
                    {% set helpText = "Should the Player information screen require the CTRL key?"|trans %}
                    {{ forms.checkbox("clientInfomationCtrlKey", title, displayProfile.getSetting("clientInfomationCtrlKey"), helpText) }}

                    {% set title = "Key for Player Information Screen"|trans %}
                    {% set helpText = "Which key should activate the Player information screen? A single character."|trans %}
                    {{ forms.input("clientInformationKeyCode", title, displayProfile.getSetting("clientInformationKeyCode"), helpText) }}

                    {% set title = "Log Level"|trans %}
                    {% set helpText = "The resting logging level that should be recorded by the Player."|trans %}
                    {% set options = [
                        { id: 'emergency', value: "Emergency"|trans },
                        { id: 'alert', value: "Alert"|trans },
                        { id: 'critical', value: "Critical"|trans },
                        { id: 'error', value: "Error"|trans },
                        { id: 'off', value: "Off"|trans }
                    ] %}
                    {{ forms.dropdown("logLevel", "single", title, displayProfile.getSetting("logLevel"), options, "id", "value", helpText) }}

                    {% set title %}{% trans "Elevate Logging until" %}{% endset %}
                    {% set helpText %}{% trans "Elevate log level for the specified time. Should only be used if there is a problem with the display." %}{% endset %}
                    {% if displayProfile.isElevatedLogging() %}
                        {% set elevatedLogs = displayProfile.getUnmatchedProperty("elevateLogsUntilIso") %}
                    {% else %}
                        {% set elevatedLogs = "" %}
                    {% endif %}
                    {{ forms.dateTime("elevateLogsUntil", title, elevatedLogs, helpText) }}

                    {% set title = "Log file path name."|trans %}
                    {% set helpText = "Create a log file on disk in this location. Please enter a fully qualified path."|trans %}
                    {{ forms.input("logToDiskLocation", title, displayProfile.getSetting("logToDiskLocation"), helpText) }}

                </div>

                <div class="tab-pane" id="advanced">

                    {% set title = "Show the icon in the task bar?"|trans %}
                    {% set helpText = "Should the application icon be shown in the task bar?"|trans %}
                    {{ forms.checkbox("showInTaskbar", title, displayProfile.getSetting("showInTaskbar"), helpText) }}

                    {% set title = "Cursor Start Position"|trans %}
                    {% set helpText = "The position of the cursor when the Player starts up."|trans %}
                    {% set options = [
                        { id: "Unchanged", value: "Unchanged"|trans },
                        { id: "Top Left", value: "Top Left"|trans },
                        { id: "Top Right", value: "Top Right"|trans },
                        { id: "Bottom Left", value: "Bottom Left"|trans },
                        { id: "Bottom Right", value: "Bottom Right"|trans }
                    ] %}
                    {{ forms.dropdown("cursorStartPosition", "single", title, displayProfile.getSetting("cursorStartPosition"), options, "id", "value", helpText) }}

                    {% set title = "Enable Double Buffering"|trans %}
                    {% set helpText = "Double buffering helps smooth the playback but should be disabled if graphics errors occur"|trans %}
                    {{ forms.checkbox("doubleBuffering", title, displayProfile.getSetting("doubleBuffering"), helpText) }}

                    {% set title = "Duration for Empty Layouts"|trans %}
                    {% set helpText = "If an empty layout is detected how long (in seconds) should it remain on screen? Must be greater than 1."|trans %}
                    {{ forms.number("emptyLayoutDuration", title, displayProfile.getSetting("emptyLayoutDuration"), helpText, "", "", "", "", "0") }}

                    {% set title = "Enable Mouse"|trans %}
                    {% set helpText = "Enable the mouse."|trans %}
                    {{ forms.checkbox("enableMouse", title, displayProfile.getSetting("enableMouse"), helpText) }}

                    {% set title = "Enable Shell Commands"|trans %}
                    {% set helpText = "Enable the Shell Command module."|trans %}
                    {{ forms.checkbox("enableShellCommands", title, displayProfile.getSetting("enableShellCommands"), helpText) }}

                    {% if theme.getSetting('DISPLAY_PROFILE_CURRENT_LAYOUT_STATUS_ENABLED', 0) == 1 %}
                        {% set title = "Notify current layout"|trans %}
                        {% set helpText = "When enabled the Player will send the current layout to the CMS each time it changes. Warning: This is bandwidth intensive and should be disabled unless on a LAN."|trans %}
                        {{ forms.checkbox("sendCurrentLayoutAsStatusUpdate", title, displayProfile.getSetting("sendCurrentLayoutAsStatusUpdate"), helpText) }}
                    {% endif %}

                    {% set title = "Expire Modified Layouts?"|trans %}
                    {% set helpText = "Expire Modified Layouts immediately on change. This means a layout can be cut during playback if it receives an update from the CMS"|trans %}
                    {{ forms.checkbox("expireModifiedLayouts", title, displayProfile.getSetting("expireModifiedLayouts"), helpText) }}

                    {% set title = "Maximum concurrent downloads"|trans %}
                    {% set helpText = "The maximum number of concurrent downloads the Player will attempt."|trans %}
                    {{ forms.number("maxConcurrentDownloads", title, displayProfile.getSetting("maxConcurrentDownloads"), helpText, "", "", "", "", "0") }}

                    {% set title = "Shell Command Allow List"|trans %}
                    {% set helpText = "Which shell commands should the Player execute?"|trans %}
                    {{ forms.input("shellCommandAllowList", title, displayProfile.getSetting("shellCommandAllowList"), helpText) }}

                    {% if theme.getSetting('DISPLAY_PROFILE_SCREENSHOT_INTERVAL_ENABLED', 0) == 1 %}
                        {% set title = "Screen shot interval"|trans %}
                        {% set helpText = "The duration between status screen shots in minutes. 0 to disable. Warning: This is bandwidth intensive."|trans %}
                        {{ forms.number("screenShotRequestInterval", title, displayProfile.getSetting("screenShotRequestInterval"), helpText, "", "", "", "", "0") }}
                    {% endif %}

                    {% set title = "Screen Shot Size"|trans %}
                    {% set helpText = "The size of the largest dimension. Empty or 0 means the screen size."|trans %}
                    {{ forms.input("screenShotSize", title, displayProfile.getSetting("screenShotSize"), helpText) }}

                    {% set title = "Limit the number of log files uploaded concurrently"|trans %}
                    {% set helpText = "The number of log files to upload concurrently. The lower the number the longer it will take, but the better for memory usage."|trans %}
                    {{ forms.number("maxLogFileUploads", title, displayProfile.getSetting("maxLogFileUploads"), helpText, "", "", "", "", "0") }}

                    {% set title = "Embedded Web Server Port"|trans %}
                    {% set helpText = "The port number to use for the embedded web server on the Player. Only change this if there is a port conflict reported on the status screen."|trans %}
                    {{ forms.number("embeddedServerPort", title, displayProfile.getSetting("embeddedServerPort"), helpText, "", "", "", "", "0") }}

                    {% set title = "Embedded Web Server allow WAN?"|trans %}
                    {% set helpText = "Should we allow access to the Player Embedded Web Server from WAN? You may need to adjust the device firewall to allow external traffic"|trans %}
                    {{ forms.checkbox("embeddedServerAllowWan", title, displayProfile.getSetting("embeddedServerAllowWan"), helpText) }}

                    {% set title = "Prevent Sleep?"|trans %}
                    {% set helpText = "Stop the player PC power management from Sleeping the PC"|trans %}
                    {{ forms.checkbox("preventSleep", title, displayProfile.getSetting("preventSleep"), helpText) }}

                </div>

                {% if commands|length > 0 %}
                <div class="tab-pane" id="commands">
                    {% include "displayprofile-form-edit-command-fields.twig" %}
                </div>
                {% endif %}
            </div>
        </form>
    </div>
</div>
{% endblock %}