
import type { MenuItemModel } from '../types/menu'
import type { RouteRecordRaw } from 'vue-router'
import {
    IconBox,
    IconFileSearch,
    IconGauge,
    IconLightningSlash,
    IconMonitor,
    IconPlugs,
    IconSmileySad,
    IconSwap,
    IconWallet,
} from '@/utils/icons'

export const navigationIcon = [
    IconLightningSlash,
    IconSmileySad,
    IconMonitor,
    IconSwap,
    IconPlugs,
    IconGauge,
    IconBox,
    IconWallet,
    IconFileSearch
]

const convertToDashedString = (input: string): string => {
    // Menghapus tanda '/' di awal dan akhir string
    input = input.replace(/^\/+|\/+$/g, '');

    // Membagi string menjadi bagian-bagian menggunakan '/'
    const parts = input.split('/');

    // Menggabungkan bagian-bagian dengan tanda '-'
    return `/${parts.join('-')}`;
}

export const convertRouteToMenu = (data: RouteRecordRaw[], basePath: string = '/home', iconIndex: number = 0): MenuItemModel[] => {
    return data.filter((i) => i.path !== '' && i.name != undefined).map((item) => {
        const convertedItem: MenuItemModel = {
            name: item.name?.toString() || '',
            path: `${basePath}/${item.path}`,
            expanded: false,
            icon: undefined,
            children: [],
        };

        if (item.children) {
            convertedItem.icon = navigationIcon[iconIndex];
            iconIndex = (iconIndex + 1) % navigationIcon.length;
            convertedItem.children = convertRouteToMenu(item.children, `${basePath}/${item.path}`, iconIndex);
        }

        return convertedItem
    })
}

export const removeExtraSlashes = (input: string): string => {
    // Menggunakan ekspresi reguler untuk mengganti tanda '/' lebih dari 2 dengan satu tanda '/'
    return input.replace(/\/{3,}/g, '/');
}

export const hasMoreThanTwoSlashes = (input: string): boolean => {
    // Menggunakan ekspresi reguler untuk mencari tanda '/' lebih dari 2 kali
    const matches = input.match(/\//g);
    return matches ? matches.length > 2 : false;
}