<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\PaymentAttempt;
use Illuminate\Support\Facades\Log;
use App\Models\ConxInboundPayment; 
use App\Http\Resources\Admin\ConxInboundPaymentDetails;
/**
 * PaymentStatusController
 *
 * Handles polling requests to retrieve the current status of a payment attempt.
 */
class PaymentStatusController extends Controller
{
    /**
     * Retrieve the current status of a payment attempt by ID.
     *
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function show(Request $request)
    {
        $request->validate([
            'payment_attempt_id' => 'required|integer|exists:payment_attempts,id',
        ]);

        try {
            $attempt = PaymentAttempt::where('id', $request->payment_attempt_id)->first();

            if (!$attempt) {
                return response()->json([
                    'success' => false,
                    'message' => 'Payment attempt not found.',
                ], 404);
            }

            $paymentArray = null;

            if($attempt->payment_id){

                $payment =  ConxInboundPaymentDetails::collection(
                ConxInboundPayment::select(
                    'conx_inbound_payments.id',
                    'conx_inbound_payments.created_at as transaction_date',
                    'conx_inbound_payments.invoice_no',
                    'conx_inbound_payments.amount')
                    ->where('conx_inbound_payments.id', $attempt->payment_id)
                    ->limit(1)->get()
                );

                $paymentArray = $payment->resolve();

            }

            return response()->json([
                'success' => true,
                'status' => $attempt->status,
                'payment' => $paymentArray,
            ]);


        } catch (\Exception $e) {
            Log::error('Polling payment status failed', [
                'payment_attempt_id' => $request->payment_attempt_id,
                'error' => $e->getMessage(),
            ]);

            return response()->json([
                'success' => false,
                'message' => 'Failed to retrieve payment status.',
            ], 500);
        }
    }
}
