// src/config/tools-menu.ts

import { mainNavItem } from '@/types';
import {
    BarChart3,
    BellRing,
    BetweenVerticalStart,
    BookOpen,
    Boxes,
    CircleUser,
    ClipboardList,
    ContactRound,
    Calculator,
    Mails,
    Megaphone,
    MessageCircleMore,
    NotebookText,
    Package,
    Percent,
    TrendingUp,
} from 'lucide-react';
import { route as routeHelper } from 'ziggy-js';
import useTenantAccess from '@/hooks/useTenantAccess';

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

// ─────────────────────────────────────────────
// Helpers
// ─────────────────────────────────────────────

const hasRoute = (name: string): boolean => {
    try {
        routeHelper(name);
        return true;
    } catch {
        return false;
    }
};

const safeRoute = (name: string, fallback = '#'): string => {
    try {
        return routeHelper(name);
    } catch {
        return fallback;
    }
};

// ─────────────────────────────────────────────
// Types
// ─────────────────────────────────────────────

interface MenuItemConfig {
    title: string;
    icon: any;
    route: string;
    app?: string;
    module?: string;
    checkApp?: boolean;
    checkRoute?: boolean;   // default: true
    checkModule?: boolean;  // default: false
    permission?: string;

}

interface MenuSectionConfig {
    title: string;
    icon: any;
    app?: string;
    checkApp?: boolean;     // default: true
    permission?: string;
    items: MenuItemConfig[];

}

// ─────────────────────────────────────────────
// TOOLS MENU CONFIGURATION
// ─────────────────────────────────────────────

const TOOLS_MENU_CONFIG: MenuSectionConfig[] = [
    {
        title: 'Productivity',
        icon: BetweenVerticalStart,
        app: 'productivity',
        checkApp: true,
        items: [
            { title: 'Tasks',     icon: ClipboardList, route: 'task.index',     module: 'productivity_task',     checkModule: true, permission: 'view_task' },
            { title: 'Reminders', icon: BellRing,      route: 'reminder.index', module: 'productivity_reminder', checkModule: true, permission: 'view_reminder' },
            { title: 'Notes',     icon: NotebookText,  route: 'note.index',     module: 'productivity_note',     checkModule: true, permission: 'view_note' },
            { title: 'Events',    icon: NotebookText,  route: 'event.index',    module: 'productivity_event',    checkModule: true, permission: 'view_event' },
        ],
    },
    {
        title: 'Communication',
        icon: ContactRound,
        app: 'communication',
        checkApp: true,
        items: [
            { title: 'Live Chat', icon: MessageCircleMore, route: 'tools.chats',     module: 'communication_live_chat', checkModule: true },
            { title: 'Email',     icon: Mails,             route: 'tools.emails',    module: 'communication_email',     checkModule: true },
            { title: 'Contacts',  icon: CircleUser,        route: 'contact.index',   module: 'communication_contacts',  checkModule: true },
            { title: 'News Feed', icon: Megaphone,         route: 'tools.news.feed', module: 'communication_news_feed', checkModule: true },
        ],
    },
    {
        title: 'Reports',
        icon: BarChart3,
        items: [
            { title: 'Sales Reports',     icon: TrendingUp, route: 'reports.sales',     app: 'sales',     checkApp: true, checkRoute: false, permission: 'view_sales_report' },
            { title: 'Purchase Reports',  icon: Package,    route: 'reports.purchase',  app: 'purchase',  checkApp: true, checkRoute: false, permission: 'view_purchase_report' },
            { title: 'Inventory Reports', icon: Boxes,      route: 'reports.inventory', app: 'inventory', checkApp: true, checkRoute: false, permission: 'view_inventory_report' },
            { title: 'Promotion Reports',  icon: Percent,     route: 'reports.promotion',  app: 'promotion',  checkApp: true, checkRoute: false, permission: 'view_promotion_report' },
            { title: 'Accounting Reports', icon: Calculator,  route: 'reports.accounting', app: 'accounting', checkApp: false, checkRoute: false, permission: 'view_accounting_report' },
            { title: 'Academic Reports',  icon: BookOpen,   route: 'reports.academic',  app: 'academic',  checkApp: true, checkRoute: false, permission: 'view_academic_report' },
        ],
    },
];


// ─────────────────────────────────────────────
// TOOLS MENU BUILDER
// ─────────────────────────────────────────────

export const toolsMenuItems = (tools: any): mainNavItem[] => {
    const { tenantAccess } = useTenantAccess();
    const result: mainNavItem[] = [];

    for (const section of TOOLS_MENU_CONFIG) {
        // Permission gate (if specified)
        if (section.permission && !can(section.permission)) {
            continue;
        }

        const shouldCheckApp = section.checkApp ?? !!section.app;

        // App-level gate
        if (shouldCheckApp && section.app && !tenantAccess('apps', section.app)) {
            continue;
        }

        const children = section.items
            .filter((item) => {
                // Route check (default: true)
                const shouldCheckRoute = item.checkRoute ?? !!item.route;
                if (shouldCheckRoute && item.route && !hasRoute(item.route)) {
                    return false;
                }

                // Item-level app check (e.g. report items filtered by active app)
                if (item.checkApp && item.app && !tenantAccess('apps', item.app)) {
                    return false;
                }

                // Module check (only if explicitly enabled)
                if (item.checkModule && item.module) {
                    if (!tenantAccess('modules', item.module)) {
                        return false;
                    }
                }

                // Permission check
                if (item.permission && !can(item.permission)) {
                    return false;
                }

                return true;
            })
            .map((item) => ({
                title: __(item.title),
                icon: item.icon,
                url: item.route ? safeRoute(item.route) : '#',
                isActive: false,
            }));

        // Only add section if it has at least one visible child
        if (children.length > 0) {
            result.push({
                title: __(section.title),
                icon: section.icon,
                isActive: false,
                items: children,
            });
        }
    }

    return result;
};
