<?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\SettlementJobs;
use App\Slack;
use App\Tally\Tally;
use App\Tally\TallyConnector;
use Illuminate\Console\Command;
use Illuminate\Http\Request;

class TallySettlementJobs extends Command
{

    protected $signature = 'tally:settlement-job';

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

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

        $serviceCount = 0;

        //$this->comment('Settlement Jobs in queue');
        $settlements = SettlementJobs::where('is_available', 0)->get();

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

        if($disableIds) {
            SettlementJobs::whereIn('id', $disableIds)->update(['is_available' => 1]);

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

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

            $tally = new Tally(
                new Request([
                    'job' => null,
                    'is_auto' => false
                ]),
                new TallyConnector()
            );

            foreach ($settlements as $settlement) {
                $settlement_id = $settlement->settlement_id;
                $settlement = json_decode($settlement->data, 1);
                //$this->comment('Processing Jobs Settlement ID'.$settlement->id);
                $tally = $tally->getTallyListener(...array_values($settlement['data']));
                $tally->settlement_id = $settlement_id;
                $tally->subvention_only = isset($settlement['subvention_only']) ? $settlement['subvention_only'] : 1;
                $tally->createJournalVoucher();
                //$this->comment('Settlement Jobs Processed ID'. $settlement->id);
                $serviceCount++;
            }

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

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

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