import { mainNavItem } from '@admin/types';
import { Activity, Blocks, ChartCandlestick, ChartPie, CheckSquare, FileText, Globe, Menu, StickyNote, Users } from 'lucide-react';
import { route as routeHelper } from 'ziggy-js';

// Translation helper is globally injected
declare function __(key: string): string;

export interface TenabledAppModules {
    apps: {
        [key: string]: boolean;
    };
    modules: {
        [key: string]: boolean;
    };
}

// Helper to safely check if a route exists
const hasRoute = (routeName: string): boolean => {
    try {
        routeHelper(routeName);
        return true;
    } catch {
        return false;
    }
};

// Helper to safely get route URL
const safeRoute = (routeName: string, fallback: string = '#'): string => {
    try {
        return routeHelper(routeName);
    } catch {
        return fallback;
    }
};

export const appMenuItems = (enabled: any): mainNavItem[] => {
    const { apps, modules } = enabled;
    const items: mainNavItem[] = [];

    // CRM
    if (apps.crm && modules.customer && hasRoute('crm.customer.index')) {
        items.push({
            title: __('CRM'),
            icon: ChartPie,
            isActive: false,
            items: [
                {
                    title: __('Customer'),
                    icon: Users,
                    url: safeRoute('crm.customer.index'),
                    isActive: false,
                },
            ],
        });
    }

    // Inventory
    if (apps.inventory && modules.stock && hasRoute('inventory.stock.index')) {
        items.push({
            title: __('Inventory'),
            icon: CheckSquare,
            isActive: false,
            items: [
                {
                    title: __('Stock'),
                    icon: CheckSquare,
                    url: safeRoute('inventory.stock.index'),
                    isActive: false,
                },
            ],
        });
    }

    // Accounting
    const accountingItems: mainNavItem[] = [];

    if (apps.accounting && modules.invoicing && hasRoute('accounting.invoice.index')) {
        accountingItems.push({
            title: __('Invoicing'),
            icon: FileText,
            url: safeRoute('accounting.invoice.index'),
            isActive: false,
        });
    }

    if (apps.accounting && modules.expense_tracking && hasRoute('accounting.expense.index')) {
        accountingItems.push({
            title: __('Expenses'),
            icon: Activity,
            url: safeRoute('accounting.expense.index'),
            isActive: false,
        });
    }

    if (accountingItems.length) {
        items.push({
            title: __('Accounting'),
            icon: ChartCandlestick,
            isActive: false,
            items: accountingItems,
        });
    }

    // Website
    if (hasRoute('menu.index')) {
        items.push({
            title: __('Website'),
            icon: Globe,
            isActive: false,
            items: [
                {
                    title: __('Menu'),
                    icon: Menu,
                    url: safeRoute('menu.index'),
                    isActive: false,
                },
                {
                    title: __('Page'),
                    icon: StickyNote,
                    url: safeRoute('page.index'),
                    isActive: false,
                },
                {
                    title: __('Blog'),
                    icon: Blocks,
                    url: safeRoute('blog.index'),
                    isActive: false,
                },
            ],
        });
    }

    return items;
};
