<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\Helpers\General;
use App\Models\Subscriber;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class TransactionController extends Controller
{
    public function create_transaction(Request $request)
    {
        General::log_API_data('TRANSACTION CREATION FROM USSD', json_encode($request->all()), 'create_transaction in API/TransactionController');

        $validator = Validator::make($request->all(), [
            'phone' =>  'required|string',
            'trans_id'  =>  'required|string',
            'trans_status'  =>  'required|string',
            'subscriber_id' =>  'required|integer'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'code'      =>  1000,
                'status'    =>  'failed',
                'message'   =>  $validator->errors()->first()
            ]);
        }

        $prefixes = ['02', '05', '2332', '2335'];
        if (!General::validate_phone($prefixes, $request->phone)) {
            return response()->json([
                'code'  =>  1000,
                'status'    =>  'failed',
                'message'   =>  'Invalid phone number provided'
            ]);
        } else {
            try {
                $transaction = Transaction::create([
                    'phone' =>  $request->phone,
                    'trans_d'   =>  $request->trans_id,
                    'trans_status'  =>  $request->trans_status,
                    'subscriber_id' =>  $request->subscriber_id
                ]);

                return response()->json([
                    'code'  =>  1001,
                    'status'    =>  'success',
                    'message'   =>  'Transaction has been stored successfully',
                ]);
            } catch (\Throwable $th) {
                General::log_API_data('TRANSACTION CREATION FROM USSD', $th->getMessage(), 'create_transaction in API/TransactionController');
                return response()->json([
                    'code'  =>  1000,
                    'status'    =>  'failed',
                    'message'   =>  'An error occurred when storing transaction'
                ]);
            }
        }
    }
}
