import {mainNavItem} from '@admin/types';
import {
    Activity,
    Database,
    FileSliders,
    FileText,
    Home,
    Languages,
    Mail,
    Settings,
    ShieldEllipsis,
    User,
    Component,
    Code,
    Laptop,
    BookOpen,
    LayoutTemplate,
    Palette,
} from 'lucide-react';

// Permission helper is globally injected; declare for TS
declare function can(permission: string): number;
declare function tenantAccess(searchFrom: string,slug: string): string;

declare function __(key: string): string;

interface UserRole {
    id: number;
    name: string;
    slug: string;
}

// Helper function to check if user has dev role only
function hasDevRole(userRoles: UserRole[]): boolean {
    return userRoles.some((role: UserRole) => role.slug === 'dev');
}

// Helper function to check if user has admin or super-admin role
function hasAdminRole(userRoles: UserRole[]): boolean {
    const allowedRoles = ['admin', 'super-admin'];
    return userRoles.some((role: UserRole) => allowedRoles.includes(role.slug));
}

export const generalMenuItems = (userRoles: UserRole[] = []): mainNavItem[] => {
    const items: mainNavItem[] = [
        {
            title: __('Dashboard'),
            icon: Home,
            url: route('dashboard'),
            isActive: false,
        },
    ];

    if (can('platform_view_user')) {
        items.push({
            title: __('User List'),
            icon: User,
            url: route('users.index'),
            isActive: false,
        });
    }

    if (can('platform_view_contact')) {
        items.push({
            title: __('Contacts'),
            icon: User,
            url: route('contacts.index'),
            isActive: false,
        });
    }

    // Theme Selector - available to all tenant users
    items.push({
        title: __('Themes'),
        icon: Palette,
        url: route('theme.selector'),
        isActive: false,
    });

    return items;
};

export const otherMenuItems = (userRoles: UserRole[] = []): mainNavItem[] => {
    let items: mainNavItem[] = [
        {
            title: __('Audit'),
            icon: FileText,
            isActive: false,
            items: [
                {
                    title: __('Activities'),
                    icon: Activity,
                    url: route('activity-log.index'),
                    isActive: false,
                },
                {
                    title: __('Email'),
                    icon: Mail,
                    url: route('email-log.index'),
                    isActive: false,
                },
                // {
                //     title: 'System',
                //     icon: FileSliders,
                //     url: '/dashboards',
                //     isActive: false,
                // },
            ],
        },
    ];

    // Conditionally add Backup menu if user has admin or super-admin role
    if (hasAdminRole(userRoles) || hasDevRole(userRoles)) {
        items.push({
            title: 'Backup',
            icon: Database,
            url: route('backup.index'),
            isActive: false,
        });
    }

    // Conditionally add User List if permission is granted
    if (can('platform_view_role')) {
        const roleItem: mainNavItem = {
            title: __('Role setup'),
            icon: ShieldEllipsis,
            url: route('roles.index'),
            isActive: false,
        };
        items.splice(-3, 0, roleItem); // insert at position 1
    }
    if (can('platform_settings')) {
        items = [
            {
                title: __('Settings'),
                icon: Settings,
                url: route('settings.company.edit'),
                isActive: false,
            },
            ...items, // prepend Settings at the beginning
        ];
    }

    return items;
};
