<?php

namespace App\Console\Commands\Mitigation;

use Illuminate\Support\Facades\Artisan;

class GroupMitigationNotification extends \App\Console\Commands\BaseCommand
{

    protected $signature = 'group:mitigation-notification';

    protected $description = 'Runs the Oculi backed attack notification lifecycle.';

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

    public function handle()
    {
        if(env('mitigation_notification_disabled')) {
            $this->log_warning("Not running as `mitigation_notification_disabled` is set in the .env file.", []);
            return 0;
        }

        $start = microtime(true);

        // Pipeline order: Observe, judge, deliver. Ergo, if an attack just appeared, it can then be judged right away.
        Artisan::call('mitigation:track-attacks');

        $time_track = microtime(true) - $start;

        Artisan::call('mitigation:queue-notifications');

        $time_notifications = microtime(true) - $start;

        Artisan::call('mitigation:queue-reports');

        $time_reports = microtime(true) - $start;

        Artisan::call('hook:process');

        if(($time_taken = microtime(true) - $start) && $time_taken > 30) {

            $this->log_error("Command has exceeded desired time.", [
                'track'                 => $time_track,
                'queue-notifications'   => $time_notifications,
                'queue-reports'         => $time_reports,
                'send'                  => $time_taken,
                'total'                 => $time_taken
            ]);

        }

        return 0;
    }
}
