import { Injectable, ServiceUnavailableException } from '@nestjs/common';
import { createHash } from 'crypto';
import { Order } from './order.entity';

export type PaymentMethod = 'qris' | 'va' | 'ewallet' | 'dana';
const methods: Record<PaymentMethod, string[]> = { qris: ['gopay'], va: ['bca_va', 'bni_va', 'bri_va', 'permata_va'], ewallet: ['gopay', 'shopeepay'], dana: ['dana'] };

@Injectable()
export class MidtransService {
  async createTransaction(order: Order, method: PaymentMethod) {
    const key = process.env.MIDTRANS_SERVER_KEY;
    if (!key) throw new ServiceUnavailableException('Midtrans belum dikonfigurasi');
    const base = process.env.MIDTRANS_IS_PRODUCTION === 'true' ? 'https://app.midtrans.com' : 'https://app.sandbox.midtrans.com';
    const response = await fetch(`${base}/snap/v1/transactions`, { method: 'POST', headers: { Authorization: `Basic ${Buffer.from(`${key}:`).toString('base64')}`, 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ transaction_details: { order_id: order.midtransOrderId, gross_amount: Number(order.total) }, customer_details: { first_name: order.customerName, phone: order.customerPhone }, item_details: [{ id: order.id, name: order.vehicleName, quantity: 1, price: Number(order.total) }], enabled_payments: methods[method] }) });
    if (!response.ok) throw new ServiceUnavailableException('Tidak dapat membuat transaksi pembayaran');
    return response.json();
  }
  isValidSignature(data: { order_id: string; transaction_status: string; status_code: string; gross_amount: string; signature_key: string }) { const key = process.env.MIDTRANS_SERVER_KEY ?? ''; const signature = createHash('sha512').update(`${data.order_id}${data.status_code}${data.gross_amount}${key}`).digest('hex'); return signature === data.signature_key; }
}
