// src/payments/payments.controller.ts
import { Controller, Post, Body, Headers, HttpCode, Inject } from '@nestjs/common';
import { PrismaService } from '../common/services/prisma.service';
import { NowPaymentsService } from './nowpayments.service';
import { Telegraf, Markup } from 'telegraf';
import { PaystarService } from './paystar.service';

@Controller('api/payments')
export class PaymentsController {
  constructor(
    private prisma: PrismaService,
    private nowPayments: NowPaymentsService,
    private paystar: PaystarService,
    @Inject('TELEGRAF_BOT') private bot: Telegraf
  ) { }

  @Post('ipn')
  @HttpCode(200)
  async handleIpn(
    @Body() body: any,
    @Headers('x-nowpayments-sig') signature: string
  ) {
    console.log('IPN received:', body);
    console.log('Signature:', signature);
    if(!body) return;

    const payment = await this.prisma.payment.findUnique({
      where: { orderId: body.order_id }
    });

    console.log('Payment found:', payment); 

    if (!payment) {
      return { status: 'order not found' };
    }

    await this.prisma.payment.update({
      where: { id: payment.id },
      data: {
        status: body.payment_status,
        paymentId: body.payment_id.toString() // به string تبدیل کن
      }
    });

    if (body.payment_status === 'waiting' || body.payment_status === 'confirmed' || body.payment_status === 'finished') {
      try {
        const user = await this.prisma.user.update({
          where: { id: payment.userId },
          data: { isPremium: true }
        });
        console.log('User upgraded to premium:', user);

        // Send congratulations message and show view results button
        if (user.telegramId) {
          const congratsMessage = '🎉 تبریک! شما با موفقیت به پرمیوم ارتقا یافتید! 👑\n\n' +
            '✨ اکنون می‌توانید از تحلیل کامل و تخصصی استفاده کنید.\n' +
            '📊 برای مشاهده نتایج تست‌های خود روی دکمه زیر کلیک کنید:';

          const keyboard = Markup.inlineKeyboard([
            [Markup.button.callback('📊 مشاهده نتیجه', 'get_result')],
            [Markup.button.callback('🔄 تست جدید', 'start_test')],
            [Markup.button.callback('🏠 منوی اصلی', 'back')]
          ]);

          try {
            await this.bot.telegram.sendMessage(
              user.telegramId,
              congratsMessage,
              keyboard
            );
          } catch (telegramError) {
            console.error('Error sending congratulations message:', telegramError);
          }
        }
      } catch (error) {
        console.error('Error updating user to premium:', error);
      }
    }

    return { status: 'پرداخت موفق بود' };
  }

  @Post('paystar-callback')
  @HttpCode(200)
  async handlePaystarCallback(@Body() body: any) {
    console.log('Paystar callback received:', body);

    if (body.status !== '1') {
      return { status: 'payment failed' };
    }

    const payment = await this.prisma.payment.findUnique({
      where: { orderId: body.order_id }
    });

    if (!payment) {
      return { status: 'order not found' };
    }

    await this.prisma.payment.update({
      where: { id: payment.id },
      data: {
        status: 'confirmed',
        paymentId: body.ref_num
      }
    });

    try {
      const user = await this.prisma.user.update({
        where: { id: payment.userId },
        data: { isPremium: true }
      });

      if (user.telegramId) {
        const congratsMessage = '🎉 تبریک! شما با موفقیت به پرمیوم ارتقا یافتید! 👑\n\n' +
          '✨ اکنون می‌توانید از تحلیل کامل و تخصصی استفاده کنید.\n' +
          '📊 برای مشاهده نتایج تست‌های خود روی دکمه زیر کلیک کنید:';

        const keyboard = Markup.inlineKeyboard([
          [Markup.button.callback('📊 مشاهده نتیجه', 'get_result')],
          [Markup.button.callback('🔄 تست جدید', 'start_test')],
          [Markup.button.callback('🏠 منوی اصلی', 'back')]
        ]);

        await this.bot.telegram.sendMessage(user.telegramId, congratsMessage, keyboard);
      }
    } catch (error) {
      console.error('Error updating user to premium:', error);
    }

    return { status: 'پرداخت موفق بود' };
  }

}