// tslint:disable:object-literal-sort-keys
import menuItemsFilter from './menuItemsFilter';
import language from './language';
const isDevelopmentEnabled: boolean = (window as any).isDevelopment as boolean;
const isComplaintEnabled: boolean = (window as any).isComplaint as boolean;
const isLighgt: boolean = (window as any).isLight as boolean;

export default (doMenue, getCopyOrCutNode, isLicenseValid: boolean, berLimit) =>
  ({ id, type}) => {
    const typ = type;
    const lng = document.getElementsByTagName('html')[0].getAttribute('lang');
    //const exampleAttr= div1.getAttribute('lang')
    let isBerLimitActive = true;
    let currentElement =document.getElementById(id);
    
    let parentLi = currentElement
    let parentId= id 

    berLimit = globalThis.berLimit
      while (parentLi) {
        if (parentLi.id?.includes('BER')) {
          parentId = parentLi.id;           
          const foundItem = berLimit.find(item => item.id === parentLi.id);
          isBerLimitActive = foundItem ? foundItem.limit : false;
          break; 
        }
        parentLi = parentLi.parentElement?.closest('li'); 
      }

    const parentnode = { id, type };
    const getItems = (ber_limit) => {
      const getAddItemsMenu = () => {
        return isLicenseValid && ber_limit
          ? {
              NewItem: newItemGenerator({ id, typ, parentnode }, doMenue),
              ...(isLighgt === 0 && {  spezial: spezialGenerator({ id, typ, parentnode }, doMenue), }),
            }
          : {};
      };

      const getImportItemMenu = (ber_limit) => {
        return isLicenseValid && ber_limit
          ? {
            ...(isLighgt === 0 && { 
                ImpItem: {
                  label: language('Konfiguration importieren', lng),
                  icon: '/icon8/impConf24.png',
                  action: () => {
                    doMenue(id, 'IMP', parentnode);
                  },
                },
            }),
              ImpModule: {
                label: language('Module importieren', lng),
                icon: '/icon8/modimp24.png',
                action: () => {
                  doMenue(id, 'MOD', parentnode);
                },
              },
            }
          : {};
      };

      const getCopyItemMenu = (ber_limit) =>
        isLicenseValid  && ber_limit
          ? {
              CopyItem: {
                label: language('kopieren', lng),
                icon: '/icon8/cpy24.png',
                action: () => {
                  doMenue(id, 'Copy', parentnode);
                },
              },
            }
          : {};

      const getInsertLineMenuItem = (ber_limit) =>
        ber_limit
          ? {
            CutItem: {
              label: language('ausschneiden', lng),
              icon: '/icon8/cut24.png',
              action: () => {
                doMenue(id, 'Cut', parentnode);
              },
            },
            InsItem: {
              label: language('Einfügen', lng),
              icon: '/icon8/ins24.png',
              action: () => {
                doMenue(id, 'Ins', parentnode);
              },
            },
            InsLink: {
              label: language('Link Einfügen', lng),
              icon: '/icon8/insLink24.png',
              action: () => {
                doMenue(id, 'Iln', parentnode);
              },
            },
            }
          : {};
          
      return {
        ...getCopyItemMenu(isBerLimitActive),
        ...getInsertLineMenuItem(isBerLimitActive),
        DelItem: {
          label: language('löschen', lng),
          icon: '/icon8/del24.png',
          action: () => {
            doMenue(id, 'DEL', parentnode);
          },
        },

        ...getAddItemsMenu(),
        ...(isLighgt === 0 && {
          ExpItem: {
            label: language('Konfiguration exportieren', lng),
            icon: '/icon8/expConf24.png',

            action: () => {
              doMenue(id, 'EXP', parentnode);
            },
          },
        }),
        UnDel: {
          label: language('Wiederherstellen', lng),
          icon: '/icon8/trash24.png',
          action: () => {
            doMenue(id, 'TRS', parentnode);
          },
        },
        Empty: {
          label: language('Papierkorb leeren', lng),
          icon: '/icon8/trash24.png',
          action: () => {
            doMenue(id, 'TRE', parentnode);
          },
        },
        ...getImportItemMenu(isBerLimitActive),
        // ImpItem: {
        //   label: 'Konfiguration importieren',
        //   icon: '/images/imp24.png',
        //   action: () => {
        //     doMenue(id, 'IMP', parentnode);
        //   }
        // }
      };
    };

    const items = getItems(isBerLimitActive);
    return menuItemsFilter(getCopyOrCutNode, items, { id, type });
  };
const lng = document.getElementsByTagName('html')[0].getAttribute('lang');
const newOrderMenuGenerator = ({ id, parentnode, typ }, doMenue) => ({
  NewORD: {
    label: language('Order', lng),
    icon: '/images/ord24.png',
    action: () => {
      doMenue(id, 'ORD', parentnode, typ);
    },
  },
});

const complaintMenuGenerator = ({ id, parentnode, typ }, doMenue) => ({
  NewBSW: {
    label: language('Beschwerde', lng),
    icon: '/icon8/bsw24.png',
    action: () => {
      doMenue(id, 'BSW', parentnode, typ);
    },
  },
});

const defaultNewItemGenerator = ({ id, parentnode }, doMenue) => ({

  label: language('Basisfunktionen', lng),
  icon: '/icon8/new24.png',

  action: () => {
    // doMenue(id,"event gedrückt",parentnode);
  },
  submenu: {
    NewGrp: {
      label: language('Gruppe', lng),
      icon: '/icon8/grp24.png',
      action: () => {
        doMenue(id, 'GRP', parentnode);
      },
    },

    NewMWT: {
      label: language('Messwert', lng),
      icon: '/icon8/mwt24.png',
      action: () => {
        doMenue(id, 'MWT', parentnode);
      },
    },

    NewVBG: {
      label: language('Verbrauchswert', lng),
      icon: '/icon8/vbg24.png',
      action: () => {
        doMenue(id, 'VBG', parentnode);
      },
    },
    NewWTG: {
      label: language('Wartung', lng),
      icon: '/icon8/wtg24.png',
      action: () => {
        doMenue(id, 'WTG', parentnode);
      },
    },
    ...(isLighgt === 0 && {
      NewDYN: {
        label: language('Aufgabe', lng),
        icon: '/icon8/dyn24.png',
        action: () => {
          doMenue(id, 'DYN', parentnode);
        },
      },
      NewBST: {
        label: language('Bestellung', lng),
        icon: '/icon8/bst24.png',
        action: () => {
          doMenue(id, 'BST', parentnode);
        },
      },
    }),
    NewMLD: {
      label: language('Meldung', lng),
      icon: '/icon8/mld24.png',
      action: () => {
        doMenue(id, 'MLD', parentnode);
      },
    },

    NewSTR: {
      label: language('Störung', lng),
      icon: '/icon8/str24.png',
      action: () => {
        doMenue(id, 'STR', parentnode);
      },
    },
    NewREP: {
      label: language('Report', lng),
      icon: '/icon8/rep24.png',

      action: () => {
        doMenue(id, 'REP', parentnode);
      },
    },
  },
});

const newItemGenerator = (nodeOptions, doMenue) => {
  const defaultMenu = defaultNewItemGenerator(nodeOptions, doMenue);
  const defaultSubmenu = defaultMenu.submenu;

  const newSubMenu = {
    ...defaultSubmenu,
    ...(isDevelopmentEnabled && newOrderMenuGenerator(nodeOptions, doMenue)),
  };

  const newMenu = {
    ...defaultMenu,
    submenu: {
      ...defaultSubmenu,
      ...newSubMenu,
    },
  };

  return newMenu;
};

const defaultspecialGenerator = ({ id, parentnode }, doMenue) => ({
  label: language('Erweiterte Funktionen', lng),
  icon: '/icon8/newExt24.png',

  submenu: {
    NewBEM: {
      label: language('Bemerkung', lng),
      icon: '/icon8/bem24.png',

      action: () => {
        doMenue(id, 'BEM', parentnode);
      },
    },

    NewEXT: {
      label: language('Datenexport', lng),
      icon: '/icon8/exp24.png',
      action: () => {
        doMenue(id, 'DEX', parentnode);
      },
    },
    NewMP: {
      label: language('Mail Daten Import', lng),
      icon: '/icon8/mip24.png',
      action: () => {
        doMenue(id, 'MIP', parentnode);
      },
    },
    NewINF: {
      label: language('Info', lng),
      icon: '/icon8/inf24.png',
      action: () => {
        doMenue(id, 'INF', parentnode);
      },
    },
    NewCST: {
      label: language('Konstante', lng),
      icon: '/icon8/cst24.png',
      action: () => {
        doMenue(id, 'CST', parentnode);
      },
    },
    NewLGK: {
      label: language('Logikbaustein', lng),
      icon: '/icon8/lgc24.png',
      action: () => {
        doMenue(id, 'LGC', parentnode);
      },
    },
    NewRWG: {
      label: language('Rechenwert', lng),
      icon: '/icon8/rgw24.png',
      action: () => {
        doMenue(id, 'RWG', parentnode);
      },
    },


    NewLST: {
      label: language('Liste', lng),
      icon: '/icon8/lst24.png',

      action: () => {
        doMenue(id, 'LST', parentnode);
      },
    },

    NewSTT: {
      label: language('Startbedingung', lng),
      icon: '/icon8/stt24.png',

      action: () => {
        doMenue(id, 'STT', parentnode);
      },
    },
    NewDOC: {
      label: language('Document', lng),
      icon: '/icon8/doc24.png',
      action: () => {
        doMenue(id, 'DOC', parentnode);
      },
    },
  },
});

const spezialGenerator = (nodeOptions, doMenue) => {
  const defaultMenu = defaultspecialGenerator(nodeOptions, doMenue);
  const defaultSubmenu = defaultMenu.submenu;

  const newSubMenu = {
    ...defaultSubmenu,
    ...(isComplaintEnabled && complaintMenuGenerator(nodeOptions, doMenue)),
  };

  const newMenu = {
    ...defaultMenu,
    submenu: {
      ...defaultSubmenu,
      ...newSubMenu,
    },
  };

  return newMenu;
};