// app/api/telegram/lib/consulting-handlers.ts
import { bot, memory, getLiterals } from './config';
import { Markup } from 'telegraf';

import { prisma } from '@/lib/prisma';

export enum ConsultingState {
  CONSULTING_MENU = 'CONSULTING_MENU',
}

export async function setupConsultingHandler() {
  // دستور /consulting برای ورود به منوی مشاوره
  bot.command('consulting', async (ctx) => {
    if (!ctx.from) return;
    
    const user = await memory?.getOrCreateUser(ctx.from);
    if (!user) {
      await ctx.reply('خطا در دریافت اطلاعات کاربر. لطفا مجدد تلاش کنید.');
      return;
    }

    // دریافت اطلاعات فعلی کاربر از دیتابیس
    const telegramUser = await prisma.telegramUser.findUnique({
      where: { id: user.id }
    });

    if (!telegramUser) {
      await ctx.reply('خطا در دریافت اطلاعات کاربر. لطفا مجدد تلاش کنید.');
      return;
    }

    // ست کردن وضعیت بات برای کاربر
    await prisma.userBotState.upsert({
      where: {
        id: telegramUser.id
      },
      update: {
        state: ConsultingState.CONSULTING_MENU
      },
      create: {
        telegramUserId: telegramUser.id,
        state: ConsultingState.CONSULTING_MENU
      }
    });

    await showConsultingMenu(ctx, telegramUser);
  });
}

// تابع مدیریت کال‌بک‌های مشاوره
export async function handleConsultingCallbacks(ctx: any, data: string, user: any) {
  try {
    const telegramUser = await prisma.telegramUser.findUnique({
      where: { id: user.id }
    });

    if (!telegramUser) {
      await ctx.answerCbQuery('خطا در دریافت اطلاعات کاربر.');
      return;
    }

    switch (data) {
      case 'request_admin':
        // درخواست پشتیبان
        if (telegramUser.respondent === 'ai') {
          await prisma.telegramUser.update({
            where: { id: user.id },
            data: { consultingRequest: 'yes' }
          });
          
          await ctx.answerCbQuery('درخواست شما ارسال شد. پشتیبان به زودی با شما ارتباط برقرار خواهد کرد.');
          
          // آپدیت منو با پیام جدید
          const updatedUser = await prisma.telegramUser.findUnique({
            where: { id: user.id }
          });
          
          if (updatedUser) {
            await showConsultingMenu(ctx, updatedUser, true);
          }
        } else {
          await ctx.answerCbQuery('شما در حال حاضر با پشتیبان در ارتباط هستید.');
        }
        break;

      case 'switch_to_ai':
        // بازگشت به پاسخگویی هوش مصنوعی
        await prisma.telegramUser.update({
          where: { id: user.id },
          data: { 
            respondent: 'ai',
            consultingRequest: 'no'
          }
        });
        
        await ctx.answerCbQuery('پاسخگویی به سوالات شما به هوش مصنوعی منتقل شد.');
        
        const updatedUser = await prisma.telegramUser.findUnique({
          where: { id: user.id }
        });
        
        if (updatedUser) {
          await showConsultingMenu(ctx, updatedUser, true);
        }
        break;

      case 'exit_consulting':
        // خروج از بخش مشاوره
        await prisma.userBotState.updateMany({
          where: { telegramUserId: user.id },
          data: { state: 'INITIAL' }
        });
        
        await ctx.answerCbQuery('از بخش مشاوره خارج شدید.');
        await ctx.editMessageText('شما از بخش مشاوره خارج شدید. میتوانید به گفتگوی معمولی با بات ادامه دهید.');
        break;

      default:
        await ctx.answerCbQuery('عملیات نامعتبر');
        break;
    }
  } catch (error) {
    console.error('Error in handleConsultingCallbacks:', error);
    await ctx.answerCbQuery('خطایی رخ داد. لطفاً بعداً دوباره تلاش کنید.');
  }
}

// نمایش منوی مشاوره
async function showConsultingMenu(ctx: any, user: any, isEdit = false) {
  const { respondent, consultingRequest } = user;
  
  let statusMessage = '🤖 <b>سیستم مشاوره</b>\n\n';
  
  // نمایش وضعیت فعلی
  if (respondent === 'admin') {
    statusMessage += '📌 <b>وضعیت فعلی:</b> شما در حال گفتگو با پشتیبان هستید.\n';
  } else { // ai
    statusMessage += '📌 <b>وضعیت فعلی:</b> پاسخگویی   مصنوعی انجام می‌شود.\n';
    
    if (consultingRequest === 'yes') {
      statusMessage += '🔔 <b>وضعیت درخواست:</b> درخواست شما برای گفتگو با پشتیبان ثبت شده و در انتظار بررسی است.\n';
    }
  }
  
  // ایجاد دکمه‌های مناسب بر اساس وضعیت فعلی
  const buttons = [];
  
  if (respondent === 'ai' && consultingRequest === 'no') {
    buttons.push([Markup.button.callback('📞 درخواست گفتگو با پشتیبان', 'request_admin')]);
  }
  
  if (respondent === 'admin') {
    buttons.push([Markup.button.callback('🤖 بازگشت به پاسخگویی هوش مصنوعی', 'switch_to_ai')]);
  }
  
  buttons.push([Markup.button.callback('❌ خروج از بخش مشاوره', 'exit_consulting')]);
  
  const markup = Markup.inlineKeyboard(buttons);
  
  if (isEdit && ctx.callbackQuery) {
    await ctx.editMessageText(statusMessage, { parse_mode: 'HTML', ...markup });
  } else {
    await ctx.reply(statusMessage, { parse_mode: 'HTML', ...markup });
  }
}