{% extends "freeform/_layouts/settings" %}

{% import "_includes/forms" as forms %}

{% set crumbs = [
    { label: craft.freeform.name, url: url("freeform") },
    { label: "Settings"|t("freeform"), url: url("freeform/settings") },
] %}

{% set title = "Template Manager"|t("freeform") %}

{% macro listFiles(folder, files) %}

    <ul class="directory-structure">
        <li class="dir">
            <span>{{ folder }}</span>
            <ul>
                {% for file in files %}
                    <li class="file">
                        <label>{{ file.name }}</label>
                        <small style="font-family: monospace; color: #afa5a5;">{{ file.fileName }}</small>
                    </li>
                {% endfor %}
            </ul>
        </li>
    </ul>

{% endmacro %}

{% block content %}

    {{ parent() }}

    <input type="hidden" name="action" value="freeform/settings/save-settings">
    {{ redirectInput('freeform/settings/template-manager') }}
    {{ csrfInput() }}

    <h2 class="first">{{ "Formatting Templates"|t('freeform') }}</h2>

    {% set suggestionsData = [] %}
    {% for directory in craft.freeform.getAllSiteTemplatesDirectories() %}
        {% set suggestionsData = suggestionsData|merge([{
            "name": directory
        }]) %}
    {% endfor %}

    {{ forms.autosuggestField({
        label: "Directory Path"|t('freeform'),
        id: "formTemplateDirectory",
        class: "code",
        disabled: readOnly,
        suggestEnvVars: false,
        suggestAliases: false,
        suggestions:[{
            "label":"Existing Directories",
            "data": suggestionsData
        }],
        tip: null,
        limit: 10,
        name: "settings[formTemplateDirectory]",
        value: settings.formTemplateDirectory,
        errors: settings.getErrors("formTemplateDirectory"),
        instructions: "Provide a relative path to the Craft Templates folder where your custom formatting templates directory is. If you have not yet created the directory, please do that before filling in this setting. This allows you to use Twig template files for your form formatting and allows Freeform to locate these files when assigning to a form."|t('freeform'),
        placeholder: "e.g. _freeform/formatting",
    }) }}

    {% if settings.absoluteFormTemplateDirectory %}

        <div id="components-wrapper">
            <div>
                <div class="btn-group">
                    {% if not readOnly %}
                        <button type="button" class="btn submit small icon add menubtn" id="add-formatting-template">
                            {{ "Clone a Sample Template"|t('freeform') }}
                        </button>
                    {% endif %}
                    <div class="menu" id="demo-template-list">
                        <ul>
                            {% for template in solspaceTemplates %}
                                <li>
                                    <a data-template="{{ template.fileName }}">{{ template.name }}</a>
                                </li>
                            {% endfor %}
                        </ul>
                    </div>
                </div>

                {{ _self.listFiles(
                    settings.formTemplateDirectory,
                    freeform.plugin.settings.customFormTemplates
                ) }}
            </div>
        </div>
    {% endif %}

    <hr />

    <h2>{{ "Success Templates"|t('freeform') }}</h2>

    {% set suggestionsData = [] %}
    {% for directory in craft.freeform.getAllSiteTemplatesDirectories() %}
        {% set suggestionsData = suggestionsData|merge([{
            "name": directory
        }]) %}
    {% endfor %}

    {{ forms.autosuggestField({
        label: "Directory Path"|t('freeform'),
        id: "successTemplateDirectory",
        class: "code",
        suggestEnvVars: false,
        suggestAliases: false,
        suggestions:[{
            "label":"Existing Directories",
            "data": suggestionsData
        }],
        tip: null,
        limit: 10,
        name: "settings[successTemplateDirectory]",
        value: settings.successTemplateDirectory,
        errors: settings.getErrors("successTemplateDirectory"),
        disabled: readOnly,
        instructions: "Provide a relative path to the Craft Templates folder where your success templates directory is. If you have not yet created the directory, please do that before filling in this setting. This allows you to use Twig template files for your success formatting and allows Freeform to locate these files when assigning to a form."|t('freeform'),
        placeholder: "e.g. _freeform/success",
    }) }}

    {% if settings.absoluteSuccessTemplateDirectory %}

        <div id="components-wrapper">
            <div>
                <button type="button" class="btn submit small icon add add-sample-template" id="add-success-template">
                    {{ "Add Sample"|t('freeform') }}
                </button>

                {{ _self.listFiles(
                    settings.successTemplateDirectory,
                    freeform.plugin.settings.successTemplates
                ) }}
            </div>
        </div>
    {% endif %}

    <hr />

    <h2>{{ "Email Notification Templates"|t('freeform') }}</h2>

    {{ forms.selectField({
        label: "Template Method"|t('freeform'),
        id: 'template-method',
        instructions: "Choose whether you want to use form-specific templates, global templates, or both."|t('freeform'),
        name: "settings[emailTemplateMethod]",
        value: settings.emailTemplateMethod,
        errors: settings.errors("emailTemplateMethod"),
        disabled: readOnly,
        options: {
            "form": "Form-specific only" | t('freeform'),
            "global": "Global only" | t('freeform'),
            "all": "Form-specific & Global" | t('freeform'),
        },
    }) }}

    <div id="global-email-block" class="{{ settings.emailTemplateMethod == 'form' ? 'hidden' }}">
        {{ forms.selectField({
            label: "Template Storage Type"|t('freeform'),
            id: 'storage-type',
            instructions: "Choose whether you want to enable email notification templates stored as files, in the database, or have both options available."|t('freeform'),
            name: "settings[emailTemplateStorageType]",
            value: settings.emailTemplateStorageType,
            errors: settings.errors("emailTemplateStorageType"),
            disabled: readOnly,
            options: {
                "files": "File" | t('freeform'),
                "database": "Database" | t('freeform'),
                "files_database": "File & Database" | t('freeform'),
            },
        }) }}

        <div class="hidden">
            {{ forms.lightswitchField({
                id: "allow-builder-templates",
                label: "Allow New Templates to be created inside the Form Builder"|t("freeform"),
                instructions: "Choose whether to allow admins to create new email notification templates inside the form builder."|t("freeform"),
                name: "settings[allowBuilderTemplateCreation]",
                value: settings.allowBuilderTemplateCreation,
                errors: settings.errors("allowBuilderTemplateCreation"),
                disabled: readOnly,
                on: settings.allowBuilderTemplateCreation,
            }) }}


            {% set isBuilder = settings.allowBuilderTemplateCreation %}
            {% set isCombined = settings.emailTemplateStorageType == "files_database" %}
            <div id="template-default" class="field {{ isBuilder ? 'builder-templates' }} {{ isCombined ? 'combined' }} {{ not isBuilder or not isCombined ? "hidden" }}">
                {{ forms.selectField({
                    label: "New Template Type for Form Builder"|t('freeform'),
                    instructions: "Select which storage method to use when creating new email notifications from within in the form builder."|t('freeform'),
                    name: "settings[emailTemplateDefault]",
                    value: settings.emailTemplateDefault,
                    errors: settings.errors("emailTemplateDefault"),
                    disabled: readOnly,
                    options: {
                        "files": "File" | t('freeform'),
                        "database": "Database" | t('freeform'),
                    },
                }) }}
            </div>
        </div>

        <div id="files-directory" class="field {{ settings.emailTemplateStorageType not in ["files", "files_database"] ? "hidden" }}">

            {{ forms.lightswitchField({
                label: "Control Panel Management for File-based Email Templates"|t('freeform'),
                instructions: "Allows users to create and edit file-based email templates from the Notifications area and form builder."|t('freeform'),
                name: "settings[allowFileTemplateEdit]",
                on: settings.allowFileTemplateEdit,
                errors: settings.errors("allowFileTemplateEdit"),
                disabled: readOnly,
                tip: "Managing template files from inside the Control Panel may not be suitable for workflows that rely on external file management or version control."|t('freeform'),
            }) }}

            {% set suggestionsData = [] %}
            {% for directory in craft.freeform.getAllSiteTemplatesDirectories() %}
                {% set suggestionsData = suggestionsData|merge([{
                    "name": directory
                }]) %}
            {% endfor %}

            {{ forms.autosuggestField({
                label: "File Directory Path"|t('freeform'),
                id: "emailTemplateDirectory",
                class: "code",
                suggestEnvVars: false,
                suggestAliases: false,
                suggestions:[{
                    "label":"Existing Directories",
                    "data": suggestionsData
                }],
                tip: null,
                limit: 10,
                name: "settings[emailTemplateDirectory]",
                value: settings.emailTemplateDirectory,
                errors: settings.getErrors("emailTemplateDirectory"),
                disabled: readOnly,
                instructions: "Provide a relative path to the Craft Templates folder where your email templates directory is. If you have not yet created the directory, please do that before filling in this setting. This allows you to use Twig template files for your email formatting and allows Freeform to locate these files when setting up notifications."|t('freeform'),
                placeholder: "e.g. _freeform/notifications",
            }) }}

            {% if settings.absoluteEmailTemplateDirectory %}

                <div id="components-wrapper">
                    <div style="margin: 0;">
                        {% if not readOnly %}
                            <button type="button" class="btn submit small icon add add-sample-template" id="add-email-template">
                                {{ "Add Sample"|t('freeform') }}
                            </button>
                        {% endif %}

                        {% set templateFiles = craft.freeform.settings.listTemplatesInEmailTemplateDirectory() %}

                        <ul class="directory-structure">
                            <li class="dir">
                                <span>{{ settings.emailTemplateDirectory }}</span>
                                <ul>
                                    {% for file in templateFiles %}
                                        <li class="file">
                                            <span>{{ file }}</span>
                                        </li>
                                    {% endfor %}
                                </ul>
                            </li>
                        </ul>
                    </div>
                </div>

            {% endif %}

        </div>
    </div>

    {{ forms.autosuggestField({
        label: "Default From Email for New Templates"|t('freeform'),
        id: "defaultFromEmail",
        class: "code",
        suggestEnvVars: true,
        suggestAliases: false,
        limit: 10,
        name: "settings[defaultFromEmail]",
        value: settings.defaultFromEmail,
        errors: settings.getErrors("defaultFromEmail"),
        disabled: readOnly,
        instructions: "The default email address to be included in the 'From Email' setting of new email notification templates."|t('freeform'),
    }) }}

    {{ forms.autosuggestField({
        label: "Default From Name for New Templates"|t('freeform'),
        id: "defaultFromName",
        class: "code",
        suggestEnvVars: true,
        suggestAliases: false,
        limit: 10,
        name: "settings[defaultFromName]",
        value: settings.defaultFromName,
        errors: settings.getErrors("defaultFromName"),
        disabled: readOnly,
        instructions: "The default name to be included in the 'From Email' setting of new email notification templates."|t('freeform'),
    }) }}

    {% if
        not readOnly
        and craft.freeform.notifications.databaseNotificationCount > 0
        and settings.emailTemplateStorageType in ['files', 'files_database']
        and settings.emailTemplateMethod != 'form'
    %}

        <div class="pane">

            <h2>{{ "Template Conversion Utility"|t('freeform') }}</h2>

            <div class="field" id="notifications-migrator">
                <div class="heading">
                    <label>
                        {{ 'Convert Database Email Templates to File-based Templates'|t('freeform') }}
                    </label>
                </div>
                <div class="instructions">
                    <p>
                        {{ 'This utility allows you to create file-based copies of your existing database email templates. Existing forms that use the selected database templates will automatically be updated to use the new file-based versions instead. File-based templates can still be managed from inside the Control Panel if enabled.'|t('freeform') }}
                    </p>
                </div>
                <div class="input">
                    <div style="margin-bottom: 10px;">
                        <input
                                type="checkbox"
                                class="checkbox"
                                name="removeFiles"
                                value="1"
                                id="remove-files"
                                checked
                        />
                        <label for="remove-files">
                            {{ "Remove original database email templates after conversion"|t('freeform') }}
                        </label>
                    </div>

                    <button class="btn" id="migrate">
                        {{ "Convert Templates"|t('freeform') }}
                    </button>
                </div>
            </div>

        </div>

    {% endif %}

{% endblock %}

{% js %}
    var dataEmail = {
        templateName: "emailsample",
    };

    dataEmail["{{ craft.app.config.general.csrfTokenName }}"] = "{{ craft.app.request.csrfToken }}";

    $("#add-email-template").on({
        click: function() {
            $.ajax({
                url: "{{ url("freeform/settings/add-email-template") }}",
                type: "post",
                dataType: "json",
                data: dataEmail,
                success: function(response) {
                    if (!response.errors.length) {
                        window.location.reload();
                    } else {
                        for (var i = 0; i < response.errors.length; i++ ) {
                            var message = response.errors[i];
                            Craft.cp.displayError(message);
                        }
                    }
                }
            });
        }
    });

    var dataSuccess = {
        templateName: "successsample",
    };

    dataSuccess["{{ craft.app.config.general.csrfTokenName }}"] = "{{ craft.app.request.csrfToken }}";

    $("#add-success-template").on({
        click: function() {
            $.ajax({
                url: "{{ url("freeform/settings/add-success-template") }}",
                type: "post",
                dataType: "json",
                data: dataSuccess,
                success: function(response) {
                    if (!response.errors.length) {
                        window.location.reload();
                    } else {
                        for (var i = 0; i < response.errors.length; i++ ) {
                            var message = response.errors[i];
                            Craft.cp.displayError(message);
                        }
                    }
                }
            });
        }
    });
{% endjs %}
