<?php
/**
 * Created by PhpStorm.
 * User: sunil
 * Date: 9/29/18
 * Time: 4:30 PM
 */

namespace App\Console\Commands;

use App\Services;
use App\Settlement;
use App\Slack;
use Illuminate\Console\Command;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;

class TallySettlement extends Command
{

    protected $signature = 'tally:settlement {--settlement_id=}';
    private $settlement_id;

    public function __construct(){
        parent::__construct();
    }

    public function handle(){
        $start_time = time();

        $serviceCount = 0;

        if (\app()->runningInConsole()) {
            $this->settlement_id = $this->option('settlement_id');
        }
        
        //$this->comment('Settlement in queue');
        $settlements = Settlement::where('is_available', 0)->where('status', 'Queue')->where('id', $this->settlement_id)->get();

        $disableIds = [];
        foreach($settlements as $settlementJob){
            $disableIds[] = $settlementJob->id;
        }

        Settlement::whereIn('id',$disableIds)->update(['is_available' => 1, 'status' => 'Pending']);

        $this->comment('Settlement updated');

        $this->comment('Settlement started');

        foreach($settlements as $settlement){
            //$this->comment('Processing Settlement ID'.$settlement->id);
            (new TallyBridge())->process(json_decode($settlement->data, 1), $settlement);
            //$this->comment('Settlement Processed ID'. $settlement->id);
            $serviceCount++;
        }

        Settlement::whereIn('id',$disableIds)->update(['status' => 'Success']);

        //$this->comment('Settlement Finished');

        //$this->comment('Settlement Service updated');
        (new Services())->log($this->signature, ['status' => true, 'service_count' => $serviceCount ? $serviceCount : 0, 'start_time' => $start_time]);

        (new Slack(new Request(['title' => 'Settlement Prepared', 'fields' => ['count' => $serviceCount], 'group' => Slack::$TALLY_INTEGRATION])))->send();

        (new Slack(new Request(['title' => 'Settlement Started', 'fields' => ['count' => $serviceCount], 'group' => Slack::$TALLY_INTEGRATION])))->send();
        Artisan::call('tally:settlement-job');
    }
}