/*-
 * ~~~~~~licensing~~~~~~
 * entaxy-management-plugin
 * ==========
 * Copyright (C) 2020 - 2025 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/licensing~~~~~~
 */
var Entaxy;
(function (Entaxy) {
    Entaxy._module.component('entaxyListItemContent', {
        bindings: {
            formFields: '<',
            mode: '<',
            errors: '<'
        },
        template:
        `
            <uib-tabset active="$ctrl.selectedGroupIndex">
              <uib-tab ng-repeat="group in $ctrl.groups track by $index"
                    heading="{{group.displayName}}" select="$ctrl.change()">
                <entaxy-form-fields items="group.formFields" errors="$ctrl.errors" mode="$ctrl.mode">
                </entaxy-form-fields>
              </uib-tab>
            </uib-tabset>
        `,
        controller: EntaxyListItemContentController
    })
    .name;

    function EntaxyListItemContentController() {

        let ctrl = this;

        ctrl.$onInit = function() {
            let groups = new Set();
            groups.add('general');

            ctrl.formFields.forEach(formField => {
                if (!formField.isBackRef && !formField.isHidden) {
                    groups.add(formField.group);
                }
            });

            ctrl.groups = Array.from(groups).map((group) => {
                return {
                    name: group,
                    displayName: group,
                    formFields: ctrl.formFields.filter(formField => formField.group === group)
                };
            });

            if (ctrl.errors) {
                let errorFields = Object.keys(ctrl.errors);
                for (let i = 0; i < ctrl.groups.length; i++) {
                    if (ctrl.groups[i].formFields.find(formField => errorFields.includes(formField.name))) {
                        ctrl.selectedGroupIndex = i;
                        break;
                    }
                }
            }
        }
    }
})(Entaxy || (Entaxy = {}));
