import { Context } from "koishi";
import { balanceParenthesis, PairCannotMatchError } from "./balancer";
import { balancePusheen, cannotBalance } from "./pusheen";

export function apply(ctx: Context) {
    ctx.middleware(async (session, next) => {
        if (false && session.content?.includes('sticker')) {
            // TODO wait for https://github.com/satorijs/satori/pull/347
            const t = session.event._data.message
            const retStickerFileID = balancePusheen(session.content)
            if (retStickerFileID) {
                session.send('<sticker id=' + retStickerFileID + '>')
            } else if (cannotBalance(session.content)) {
                session.send(`<reply id=${session.messageId}>🍓 IN CRISIS, CANNOT balance your Pusheen!`);
            }
        } else if (session.content) {
            try {
                const responseText = balanceParenthesis(session.content!)
                if (responseText) session.send(responseText)
            } catch (e) {
                if (e instanceof PairCannotMatchError) {
                    session.send(e.message)
                } else {
                    throw new Error(`Exception ${e} when handling message ${JSON.stringify(session.content, null, 2)}`)
                }
            }
        }
        await next();
        // else if ('inline_query' in reqBody && 'query' in reqBody.inline_query) {
        //             const queryID = reqBody.inline_query.id
        //             const queryText = reqBody.inline_query.query
        //             try {
        //                 const balancedText = queryText + balanceParenthesis(queryText)
        //                 await botRequest('answerInlineQuery', {
        //                     inline_query_id: queryID,
        //                     results: [
        //                         {
        //                             type: 'article',
        //                             id: Math.random(),
        //                             title: balancedText,
        //                             input_message_content: {
        //                                 message_text: balancedText,
        //                             },
        //                         },
        //                     ],
        //                 })
        //             } catch (e) {
        //                 if (e instanceof PairCannotMatchError) {
        //                     await botRequest('answerInlineQuery', {
        //                         inline_query_id: queryID,
        //                         results: [
        //                             {
        //                                 type: 'article',
        //                                 id: Math.random(),
        //                                 title: 'CANNOT balance your parenthesis',
        //                                 input_message_content: {
        //                                     message_text: 'CANNOT balance your parenthesis',
        //                                 },
        //                             },
        //                         ],
        //                     })
        //                 }
        //             }
        //         }
    });
}