window.AddressPopUp = function (options,itemData) {

    /*
     * Variables accessible
     * in the class
     */
    let Opts = {
        active: false,
        array: [],
        onAfterSave: function () {
        },
        onClose: function () {
        },
    };
    let data = {};
    let root = this;
    /*
     * Constructor
     */
    this.construct = function (options,itemData) {
        console.log(' Address constructor called');
    };

    this.init = function (options,itemData) {
        console.log(' Address  nit called');
        $.extend(Opts, options);
        $.extend(data, itemData);
        root.bindClickAction();
    };

    this.clearData=function (){
        data={};
        root.renderForm();
    }

    this.setData=function (itemData){
        $.extend(data, itemData);
    }

    this.show=function () {
        $('.addressModal').modal().show();
    }

    this.renderForm=function (){
        $('.addressModal input').val('');
        $('.addressModal textarea').val('');
        $.each(data,function (key,value) {
            /*
                            console.log('key:'+key+' value:'+value);
                            console.log('.addressModal'+' *[name=contact'+$.ucFirst(key)+']');
            */
            $('.addressModal'+' *[name=address'+$.ucFirst(key)+']').val(value);
        });
    }

    this.loadData=function (id){
        console.log('loading id:'+id);
        $('.addressModal .spinnerDiv').removeClass('d-none');
        $('.addressModal .addressModalForm').addClass('d-none');
        $('.addressModal').modal().show();
        let url=APP.getOpts()["Url"]["addressPopup"]['show'];
        url=url.replaceAll('*id*',id);
        $.ajax({
            url: url,
            type: 'GET',
            headers: {
                'X-CSRF-TOKEN': APP.getApiToken()
            },
            success: function (data) {
                root.setData(data);
                root.renderForm();
                $('.spinnerDiv').addClass('d-none');
                $('.addressModalForm').removeClass('d-none');
            },
            error: function (xhr, ajaxOptions, thrownError) {
                if (xhr.responseJSON.errors) {
                    ajaxErrorFieldHandler(xhr.responseJSON.errors);
                }else{
                    if(xhr.status==404){
                        ajaxErrorFieldHandler([{'detail':'Nincs ilyen elem.'}]);
                    }else{
                        ajaxErrorFieldHandler([{'detail':'Általános hiba.'}]);
                    }
                }
                $('.addressModal').modal('hide');
            },
        });
        return ;
        let contactData={
            id:76,
            name:'Miksóné Borbély Erzsébet',
            email:'szamlazas1@funkcio.hu',
            phone:'+36203407500'
        };
        root.setData(contactData);
        root.renderForm();
        $('.spinnerDiv').addClass('d-none');
        $('.addressModalForm').removeClass('d-none');

    }

    this.getOpts = function () {
        return Opts;
    }
    this.bindClickAction = function () {
        $('.addressModal .btn').unbind('click');
        $('.addressModal .buttonClose').bind('click', root.clickActionButtonClose);
        $('.addressModal .buttonSave').bind('click', root.clickActionButtonSave);
    }

    this.clickActionButtonClose = function (event) {
        console.log('click close');
        Opts.onClose(event, root.formDataToDataObjectAPICall());
    }


    this.save = function (data) {
        let form = $('.addressModal form');
        let url=form.attr('action');
        let ajaxType='POST';
        if(data.id){
            url=APP.getOpts()["Url"]["addressPopup"]['update'];
            url=url.replaceAll('*id*',data.id);
            ajaxType='PUT';
        }
        if(!data.status){
            data.status=APP.getOpts()["addressPopup"]['defaultStatus'];
        }
        debug('!!!!URL!!!!! '+url);

        $.ajax({
            url: url,
            type: ajaxType,
            headers: {
                'X-CSRF-TOKEN': APP.getApiToken()
            },
            data: data,
            success: function (data) {
                Opts.onAfterSave(data);
                $('.addressModal').modal('toggle');
            },
            error: function (xhr, ajaxOptions, thrownError) {
                if (xhr.responseJSON.errors) {
                    ajaxErrorFieldHandler(xhr.responseJSON.errors);
                }
            },
        });

        return false;
    }

    this.clickActionButtonSave = function (event) {
        console.log('click save');
        let itemData = root.formDataToDataObjectAPICall(), savedData;
        debug(itemData);
        if(savedData=root.save(itemData)){
            return  true;
        }
        return false;
    }



    this.formDataToDataObjectAPICall = function () {
        let data = new FormData(document.querySelector('.addressModal form'));
        let formJSON = Object.fromEntries(data.entries());
        /*Multiselect or checkbox to array:
        formJSON.multiselectName = data.getAll('multiselectName');
        */
        $.each(formJSON, function (item, value) {
            debug($.lcFirst(item.replace('address', '')));
            formJSON[$.lcFirst(item.replace('address', ''))] = value;
            delete formJSON[item];
        });
        if(formJSON.phone){
            formJSON.phone=formJSON.phone.replaceAll('_','');
        }
        if(formJSON.email){
            formJSON.email=formJSON.email.replaceAll('_','');
        }
        return formJSON;
    }

    this.construct(options,itemData);
}
