import {Action, Command, Ctx, Message, On, Wizard, WizardStep} from "nestjs-telegraf";
import {WIZARD_COMMENT_SCENE_ID} from "../telegram.constants";
import * as scenes from "telegraf/scenes";
import {ManagerService} from "../../manager/manager.service";
import {PublishPageService} from "../../social-api/publish.page.service";
import {XReaderService} from "../../x-reader/x-reader.service";
import {TrendsService} from "../../trends/trends.service";

@Wizard(WIZARD_COMMENT_SCENE_ID)
export class CommentWizard {
    constructor(
        private readonly managerService: ManagerService,
    ) {
    }

    // Bắt lệnh /cancel để thoát
    @Command('cancel')
    async cancel(@Ctx() ctx: scenes.WizardContext) {
        await ctx.reply('Đã hủy quy trình.');
        return ctx.scene.leave(); // Thoát khỏi wizard ngay lập tức
    }

    @WizardStep(1)
    async onSceneEnter(@Ctx() ctx: scenes.WizardContext) {
        // await ctx.wizard.next();
        // return 'Welcome to wizard scene ✋ Send me your name';

        //@ts-ignore
        const text = ctx.message?.text;
        console.log(ctx.message);
        const linkX = text.split(' ')[1]; // Gets "my_payload"
        //
        // // Pass it as the second argument (initial state)
        //await ctx.scene.enter(WIZARD_COMMENT_SCENE_ID, {customPayload: payload});
        console.log(linkX);

        let _linkX = linkX.replace('twitter.com', 'x.com').split('?')[0];
        const match = _linkX.match(/status\/(\d+)/);
        if (!match) {
            await ctx.reply('URL X không hợp lệ');
            return ctx.scene.leave();
        }
        const tweetId = match[1];

        // 1. Lưu dữ liệu vào state
        (ctx.wizard.state as any).linkUrl = _linkX;
        (ctx.wizard.state as any).tweetId = tweetId;
        await ctx.sendMessage(
            `🤖 Bạn muốn viết bằng ngôn ngữ nào , bấm \cancel để huỷ `,
            {
                parse_mode: 'Markdown',
                reply_markup: {
                    inline_keyboard: [
                        [
                            {text: "🇬🇧English", callback_data: `write_comment_en`},
                            {text: "🇯🇵Japan", callback_data: `write_comment_ja`},
                        ],
                        [
                            {text: "🇰🇷Korea", callback_data: `write_comment_ko`},
                            {text: "🇻🇳VN", callback_data: `write_comment_vi`},
                        ],
                        [{text: "❌Cancel", callback_data: `write_comment_cancel`},]
                    ]
                }
            }
        );
        // const {payload} = ctx.scene;

        // await ctx.reply(`Gứi link của bài X bạn cần reply`);

        ctx.wizard.next();
    }

    @WizardStep(2)
    @On('text')
    @Action(/write_comment_(.+)/)
    async step2(@Ctx() ctx: scenes.WizardContext) {
        // 1. Lấy dữ liệu từ nút bấm
        // @ts-ignore
        const selectedItem = ctx.match[1]
        if (selectedItem == 'cancel') {
            await ctx.reply('Đã hủy quy trình.');
            return ctx.scene.leave();
        }

        // 2. Lưu vào state để dùng cho các bước sau (nếu cần)
        (ctx.wizard.state as any).selectedLanguage = selectedItem;

        // 3. Phải gọi answerCbQuery để tắt biểu tượng "loading" trên nút bấm
        await ctx.answerCbQuery();

        await ctx.reply(`Bạn đã chọn ${selectedItem}. Vui lòng chờ phân tích ...`);
        const url = (ctx.wizard.state as any).linkUrl;
        await this.managerService.manualTriggerCommentLinkTwitter(url, selectedItem);

        // Chuyển sang bước 3 (nhận địa chỉ bằng text)
        // ctx.wizard.next();
        await ctx.scene.leave();
    }
}
