import InnRoller from './InnRoller.js';

/**
 * Initialisation du module Inn (Auberge)
 */
export function initInn() {
    console.log("Inn: Initialisation du module d'auberge");

    // Hook pour initialiser au démarrage
    Hooks.once('ready', async () => {
        console.log("Inn: Module d'auberge prêt");

        // Exposer la classe globalement
        game.wfrp4e = game.wfrp4e || {};
        game.wfrp4e.inn = InnRoller;

        console.log("Inn: Classe accessible via game.wfrp4e.inn");

        // Enregistrer la commande dans le système WFRP4e si disponible
        if (game.wfrp4e?.commands) {
            // Patch warhammer-lib 3.0.2 bug: parseArgs crashes when no args provided
            // (match.groups.args is undefined when user types command without arguments)
            if (game.wfrp4e.commands.parseArgs && !game.wfrp4e.commands._parseArgsPatched) {
                const _origParseArgs = game.wfrp4e.commands.parseArgs.bind(game.wfrp4e.commands);
                game.wfrp4e.commands.parseArgs = function(command, text) {
                    return _origParseArgs(command, text ?? "");
                };
                game.wfrp4e.commands._parseArgsPatched = true;
            }
            game.wfrp4e.commands.add({
                auberge: {
                    description: "Jets sur les tables d'auberge (FR)",
                    args: ["table"],
                    defaultArg: "table",
                    callback: (table) => {
                        // Vérifier que l'utilisateur est GM
                        if (!game.user.isGM) {
                            ui.notifications.warn("La commande /auberge est réservée au MJ.");
                            return;
                        }

                        console.log(`Inn: Commande /auberge exécutée avec table="${table}"`);

                        // Convertir null en undefined
                        table = table || undefined;

                        // Si pas de table spécifiée, afficher l'aide
                        if (!table) {
                            InnRoller.displayHelp();
                        } else if (table === 'help' || table === 'aide') {
                            InnRoller.displayHelp();
                        } else if (table === 'list' || table === 'liste') {
                            InnRoller.listTables();
                        } else if (table === 'menu') {
                            InnRoller.displayMenuChoice();
                        } else {
                            InnRoller.rollInnTable(table);
                        }
                    }
                }
            });
            console.log("Inn: Commande /auberge enregistrée avec succès");
        } else {
            console.warn("Inn: game.wfrp4e.commands non disponible");
        }
    });

    // Hook pour gérer les clics sur les liens de tables d'auberge
    Hooks.on('renderChatMessage', (message, html, data) => {
        // Ajouter un listener pour les clics sur les liens d'auberge
        html.find('a[data-action="clickAuberge"]').click((event) => {
            event.preventDefault();
            const tableKey = $(event.currentTarget).data('table');
            console.log(`Inn: Clic sur la table ${tableKey}`);

            if (game.user.isGM) {
                InnRoller.rollInnTable(tableKey);
            } else {
                ui.notifications.warn("Seul le MJ peut utiliser les tables d'auberge.");
            }
        });

        // Ajouter un listener pour les clics sur les boutons de menu
        html.find('a[data-action="clickAubergeMenu"]').click((event) => {
            event.preventDefault();
            const quality = $(event.currentTarget).data('quality');
            console.log(`Inn: Clic sur menu de qualité "${quality}"`);

            if (game.user.isGM) {
                // Si quality === "menu", afficher le choix, sinon générer directement
                if (quality === 'menu') {
                    InnRoller.displayMenuChoice();
                } else {
                    InnRoller.generateMenu(quality);
                }
            } else {
                ui.notifications.warn("Seul le MJ peut utiliser les tables d'auberge.");
            }
        });

        // Bouton "Enregistrer dans le journal Menus"
        html.find('button[data-action="saveMenuToJournal"]').click(async (event) => {
            event.preventDefault();
            const btn = event.currentTarget;
            const menuName = btn.dataset.menuName;
            await InnRoller.saveMenuToJournal(menuName, message.content);
        });
    });
}
