<?php

namespace Yas\Ocbc\Console\Commands;

use Illuminate\Console\Command;
use Yas\Core\Handler\Log;
use Illuminate\Support\Facades\Config;
use Yas\Ocbc\Repositories\OcbcTransactionRepository;
use Yas\Ocbc\Payment\CyberSourceRestClient;
use Yas\Ocbc\Models\Transaction;


class OcbcTransactionQuery extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'ocbc:transaction-query';
    protected $description = 'Query OCBC transactions';
    
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(
    protected Log $log)
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        try {
            $this->log->generateLog('info', "OCBC Transaction Query Cron started", [], config("ocbc.order_transaction_query"));
            
            // $this->merchantId   = config('ocbc.rest_api.merchant_id');
            // $this->info($this->merchantId);
            // die;

            // $transactionId = '7869605932536798303011';
            // $transaction = app(OcbcTransactionRepository::class)->where("ocbc_transaction_id", $transactionId)->first();
            // app(CyberSourceRestClient::class)->getTransactionDetails($transaction->ocbc_transaction_id,'order_transaction_query');

            $transaction = app(OcbcTransactionRepository::class)->whereNotIn("status", [
                        //core()->getConfigData('sales.payment_methods.ocbc.transaction_status.paid'),
                        core()->getConfigData('sales.payment_methods.ocbc.transaction_status.cancel')
                    ])->whereDate('created_at', now()->today())->get();
                    
            foreach ($transaction as $trans) {
                $this->log->generateLog('info', "OCBC Transaction Query Cron", [
                    'transaction' => $trans,
                    'tranasction_id' => $trans->ocbc_transaction_id,
                    'order_no' => $trans->order_no,
                ], config("ocbc.order_transaction_query"));

                if(!empty($trans->ocbc_transaction_id)){
                    app(CyberSourceRestClient::class)->getTransactionDetails($trans->ocbc_transaction_id,'order_transaction_query');
                }
                // }else{
                //     $this->log->generateLog('Error', "OCBC Transaction Query Cron", [
                //         'order_no' => $trans->order_no,
                //         'message' => 'Transaction ID is empty or not set'
                //     ], config("ocbc.order_transaction_query"));
                // }
            }

            $this->log->generateLog('info', "OCBC Transaction Query Cron ended", [], config("ocbc.order_transaction_query"));
            
        } catch (\Throwable $e) {
            $this->log->generateLog('Error', "OCBC Transaction Query Cron", [
                'errormessage' => $e->getMessage(),
                'trace_string' => $e->getTraceAsString()
            ], config("ocbc.order_transaction_query"));
        }
    }
}
