/***************************************************
Manager.js
    A Vonalkód Rendszerház riport csomagok kezeléséhez
    készült metódusok és események.
----------------------
Alapítva:
    2019.09.014.-09.15. Wittmann Antal
Módosult:
****************************************************/
/*##### EVENTS #####*/
$(document).ready(function () {
    'use strict';

    var thisfn = 'iSchedulerReport.Manager.js: ready event: ';
    console.log(thisfn + 'PING');

    // Resize figyelése, hogy a card-body mérete kitöltse a képernyőt
    $(window).resize(function () {
        console.log(thisfn + 'window.resize event')
        vrhct.masterdata.resizeCardBody();
    });
    vrhct.masterdata.resizeCardBody();
    if (typeof vrhmenu != 'undefined') {
        vrhmenu.MenuSwapEventFunction = function () {
            vrhct.masterdata.resizeCardBody();  // menüváltozáskor is hívja meg a resize-t
        }
    }

    schrep.InitTable();

    console.log(thisfn + 'END');
}); // $(document).ready END 
/*##### EVENTS END #####*/


/**
 * Az ütemezések kezeléséhez készült prototípus.
 * 
 * @param {ExportToSchedulerReportManagerScript} imp Paraméter objektum, cshtml-ből küldött és ott feltöltött állandókat tartalmaz.
 */
function SchedulerReportManagerScript(imp) {
    'use strict';

    /*##### PROTOTYPE VARIABLES #####*/
    var me = this;  // hogy a belső függvényekben is tudjak hivatkozni a prototype tulajdonságaira
    var thispt = 'SchedulerReportManagerScript: ';

    var isInEdit = false;           // annak jelzése, hogy a szerkesztés ablakot aktiválták
    var isInDelete = false;         // annak jelzése, hogy a törlő ablakot aktiválták

    // DataTable oszlopok definciója
    var dtColumns = [
        { data: imp.Data.Name },
        { data: imp.Data.GroupId },
        { data: imp.Data.Description },
        { data: imp.Data.RoleName },
        {
            data: imp.Data.Active,
            render: function (data, type, row) {
                var ficon = data ? 'fa-check' : 'fa-times'
                return '<span class="fas ' + ficon + ' fa-lg ml-1"></span>';
            }
        },
        { data: imp.Data.Mark },
        {   // a műveletek oszlopa
            render: function (data, type, row) {
                var temp = document.createElement('div');

                var spane = document.createElement('span');
                $(spane).attr('title', imp.Titles.PackageUpdate);
                $(spane).addClass('fas fa-pencil-alt datatableActionIcon');
                $(spane).attr('onclick', 'schrep.Edit("' + row.Name + '","' + row.GroupId + '")');
                $(temp).append(spane);

                var spand = document.createElement('span');
                $(spand).attr('title', imp.Titles.PackageDelete);
                $(spand).addClass('fas fa-trash-alt datatableActionIcon');
                $(spand).attr('onclick', 'schrep.Delete(' + row.Id + ',"' + row.Name + '","' + row.Description + '")');

                $(temp).append(spand);
                return $(temp).html();
            }
        }
    ];
    var dtColumnDefs = [
        { targets: [1], width: '75px', bVisible: imp.VisibleGroupCol },         // GroupId 
        { targets: [4], width: '40px' },                                        // Active
        { targets: [5], width: '45px' },                                        // Mark
        { targets: [6], width: '100px', bSortable: false, bSearchable: false }   // műveletek
    ];
    var dtFilterDefs = [
        { column: 4, id: imp.Ids.Input.FilterActive },
    ];
    /*##### PROTOTYPE VARIABLES END #####*/


    /*##### PROPERTIES #####*/

    /** Az inicializált tábla DataTable objektuma */
    this.PackageTable = null;

    /*##### PROPERTIES END #####*/


    /*##### METHODS #####*/

    /**
     * Tábla inicializálása.
     */
    this.InitTable = function () {
        var thisfn = thispt + 'InitTable method: ';
        me.PackageTable = new VrhDataTable({
            ajax: { url: imp.Url.GetData }, // az adatlistát eredményező akció
            autoWidth: false,
            columns: dtColumns,
            columnDefs: dtColumnDefs,
            filterDefs: dtFilterDefs,
            lcid: imp.LCID,
            initComplete: function (setting, json) { // a táblázat elkészültekor meghívott függvény
                console.log(thisfn + 'Table.initComplete callback: PING');
                var col = me.PackageTable.Table.column(1); // az 1. oszlop a GroupId oszlopa
                col.visible(imp.VisibleGroupCol);
            },
            stateSave: true,// ha true, akkor a csoport oszlop mindig a legutóbbi beállítás szerint látszódik, ezért van az initComplete-ben
            tableId: imp.Ids.Table,
        });
    };// InitTable method END

    //this.ChangeTemporary = function () {
    //    var thisfn = thispt + 'ChangeTemporary method: ';
    //    var urlGetData = imp.Url.GetData + '&isTemporary=' + $('#' + imp.Ids.Input.CheckBoxTemp).is(':checked');
    //    console.log(thisfn + 'url=%s', urlGetData);
    //    me.PackageTable.Table.ajax.url(urlGetData);
    //    me.PackageTable.Table.draw('page');
    //};


    /**
     * Csomag törlésének indítása.
     * 
     * @param {number} packageId A törlendő csomag azonosítója.
     * @param {string} packageName A törlendő csomag neve.
     * @param {string} packageDescription A törlendő csomag leírása.
     */
    this.Delete = function (packageId, packageName, packageDescription) {
        try {
            if (isInDelete) return;
            isInDelete = true;

            var thisfn = thispt + 'Delete method: ';
            console.log(thisfn + 'packageId="%s", packageName="%s", packageDescription="%s"', packageId, packageName, packageDescription);

            var confirmMessage = '<table>'
                + '<tr><td>' + imp.Labels.Id + ':</td><td style="padding-left:4px;">' + packageId + '</td></tr>'
                + '<tr><td>' + imp.Labels.Name + ':</td><td style="padding-left:4px;">' + packageName + '</td></tr>'
                + '<tr><td>' + imp.Labels.Description + ':</td><td style="padding-left:4px;">' + packageDescription + '</td></tr>'
                + '</table>'
                + '<br />'
                + '<div style="font-weight:bold;">' + imp.Confirmations.PackageDelete + '</div>';

            vrhct.bootbox.delete({
                ajax: {
                    url: imp.Url.Delete,
                    data: { id: packageId }
                },
                title: imp.Titles.Confirmation,
                confirm: confirmMessage,
                shown: function () {
                    isInDelete = false;
                },
                success: function () {
                    console.log(thisfn + 'Sikeres törlés. Itt vagyunk a callback-ben.');
                    me.PackageTable.Table.draw('page');
                }
            });
        } catch (e) {
            console.error(e);
            isInDelete = false;
        }
    }; // Delete method END   


    /**
     * Riport csomag szerkesztés ablak inicializálása.
     * 
     * @param {string} packageName A riport csomag egyedi belső azonosítója. Ha üres, akkor felvitel.
     * @param {string} groupId A riport csomag csoportazonosítója. Felvitelkor az kerül bele, amivel a Manager-t inicializálták.
     */
    this.Edit = function (packageName, groupId) {
        try {
            if (isInEdit) return;
            isInEdit = true;

            var head;
            var thisfn = thispt + 'Edit method: ';
            if (packageName) { // no null, no undefined, no empty string, no NaN, no false
                head = imp.Titles.PackageUpdate;
            }
            else {
                head = imp.Titles.PackageAdd;
                groupId = imp.PackageGroupId;
            }
            console.log(thisfn + 'packageName="%s"; groupId="%s"; head="%s"', packageName, groupId, head);
            vrhct.bootbox.edit({
                ajax: {
                    url: imp.Url.Editor,
                    data: { objectId: packageName, groupId }
                },
                buttonsDefault: false,
                title: head,
                formid: imp.Ids.Form.Editor,
                size: 'xl',
                shown: function () {
                    isInEdit = false;
                }
            });
        } catch (e) {
            console.error(e);
            isInEdit = false;
        }
    }; // Edit method END


    /**
     * Riport csomagok megjelölésének elindítása.
     */
    this.PackagesMarking = function (packagesMark) {
        var thisfn = thispt + 'PackigesMarking method: ';
        console.log(thisfn + 'packagesMark=%i', packagesMark);

        vrhct.bootbox.show(imp.Url.PackagesMarking, {
            ajax: {
                type: 'POST',
                data: { packagesMark }
            },
            isReturnInfoJSON: true,
            sizeError: 'large'
        });

    }; // PackagesMarking method END

    /*##### METHODS END #####*/

    /*##### PRIVATE FUNCTIONS #####*/
    /*##### PRIVATE FUNCTIONS END #####*/

    /* /// Mark no schedule Button Click /// */
    $('#' + imp.Ids.Button.Create).on('click', function () {
        me.Edit();
    });

/* /// Mark no schedule Button Click /// */
    $('#' + imp.Ids.Button.MarkNoSchedule).on('click', function () {
        me.PackagesMarking(imp.PackagesMark.NoShedule);
    });

    /* /// Mark Packages Missing Button Click /// */
    $('#' + imp.Ids.Button.MarkMissing).on('click', function () {
        me.PackagesMarking(imp.PackagesMark.MissingReport);
    });

    /* /// Clear Marks Button Click /// */
    $('#' + imp.Ids.Button.MarkClear).on('click', function () {
        me.PackagesMarking(imp.PackagesMark.Clear);
    });

} // SchedulerManagerScript prototype END

/** A prototípus számára küldendő állandó értékek osztálya. */
function ExportToSchedulerReportManagerScript() {
    /** Honnan hívják az Editor-t. */
    this.CallingSource = '',
        /** Megerősítést kérő üzenetek gyűjtőhelye */
        this.Confirmations = {
            PackageDelete: '',
        };
    /** A táblázat oszlopainak adatelérése */
    this.Data = {
        Name: '',
        GroupId: '',
        Description: '',
        RoleName: '',
        Active: '',
        Mark: ''
    };
    /** A nézeten lévő html objektumok azonosítóinak gyűjtőhelye */
    this.Ids = {
        Button: {
            Create: '',
            MarkClear: '',
            MarkMissing: '',
            MarkNoSchedule: '',
        },
        Form: {
            Editor: '',
        },
        Input: {
            FilterActive: '',
        },
        Table: '',
    };
    /** A nézeten lévő inputok címkéinek gyűjtőhelye */
    this.Labels = {
        Description: '',
        Id: '',
        Name: '',
    };
    /** A környetben érvényes nyelvi kód */
    this.LCID = '';
    /** Az üzenetek gyűjtőhelye */
    this.Messages = {
        Success: '',
        UnSuccess: '',
        PackageNameEmpty: '',
    };
    /** A Manager-t ezzel a csoportazonosítóval inicializálták */
    this.PackageGroupId = '';
    /** A riport csomagok jelölésének módjai */
    this.PackagesMark = {
        Clear: 0,
        NoShedule: 0,
        MissingReport: 0,
    };
    /** A nézeten lévő eszközök feliratozásának, címeinek és tooltipjeinek gyűjtőhelye */
    this.Titles = {
        Confirmation: '',
        OperationProgress: '',
        PackageAdd: '',
        PackageUpdate: '',
        PackageDelete: '',
    };
    /** A nézeten lévő akciókra mutató url-ek gyűjtőhelye */
    this.Url = {
        Editor: '',
        Delete: '',
        GetData: '',
        PackagesMarking: '',
    };
    this.VisibleGroupCol = false;
}
