<?php

namespace App\Console;

use App\Console\Commands\AutoDumpLoad;
use App\Console\Commands\BalanceChecker;
use App\Console\Commands\CheckHangJob;
use App\Console\Commands\DeliveryReceiver;
use App\Console\Commands\EmailQuery;
use App\Console\Commands\FetchData;
use App\Console\Commands\FixPeople;
use App\Console\Commands\FixSMS;
use App\Console\Commands\ImportData;
use App\Console\Commands\PeopleFaker;
use App\Console\Commands\ReportProcessor;
use App\Console\Commands\SendEmailAlert;
use App\Console\Commands\ServiceStart;
use App\Console\Commands\ServiceStop;
use App\Console\Commands\SmsQuery;
use App\Console\Commands\socialReset;
use App\Console\Commands\SpeedyBulkEmail;
use App\Console\Commands\SpeedyBulkFix;
use App\Console\Commands\SpeedyBulkSms;
use App\Console\Commands\SpeedyPersoBulkEmail;
use App\Console\Commands\SpeedyPersoBulkSms;
use App\Console\Commands\SpeedySingleEmail;
use App\Console\Commands\SpeedySingleSms;
use App\Console\Commands\TablePartioner;
use App\Tools\EmailAlert;
use App\Tools\ServiceTools;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Spatie\Backup\BackupDestination\Backup;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        AutoDumpLoad::class,
//        SpeedyBulkSms::class,
//        SpeedyPersoBulkSms::class,
        //ReportProcessor::class,
        DeliveryReceiver::class,
//        SpeedySingleSms::class,
        SmsQuery::class,
        SendEmailAlert::class,
//        CheckHangJob::class,
        ServiceStart::class,
        ServiceStop::class,

        SpeedySingleEmail::class,
        SpeedyBulkEmail::class,
        SpeedyPersoBulkEmail::class,
        EmailQuery::class,

        PeopleFaker::class,
        //ImportData::class,
        //FixSMS::class,
        FixPeople::class,
        TablePartioner::class,
        FetchData::class,
        socialReset::class,
//        Backup::class
        BalanceChecker::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command(BalanceChecker::class)->everyMinute()->withoutOverlapping();
        if(ServiceTools::can_run_service()) {
                //executing dump autoload every 30min
                $schedule->command('dump:autoload')
                    ->name('dump_autoload')
                    ->everyThirtyMinutes()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'dump_autoload.log'));

                $schedule->command('partition:sms_log')
                    ->name('partition_logs')
                    ->twiceMonthly()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'partition_logs.log'));


//                $schedule->command('bulksms:start')
//                    ->name('speedy_bulk_s')
//                    ->everyMinute()
////                    ->withoutOverlapping()
//                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'speedy_sms_bulk.log'));


                $schedule->command('bulksms:p_start')
                    ->name('speedy_bulk_p')
                    ->everyMinute()
//                    ->withoutOverlapping()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'speedy_sms_perso_bulk.log'));

//                $schedule->command('areport:start')
//                    ->name('areport_start')
//                    ->everyMinute()
//                    ->withoutOverlapping()
//                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'report_start.log'));

//                $schedule->command('palert:send_email')
//                    ->name('psend_error_alert')
//                    ->everyTenMinutes()
//                    ->withoutOverlapping()
//                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'error_alert.log'));

//                $schedule->command('palert:check_jobs')
//                    ->name('palert_check_jobs')
//                    ->everyMinute()
//                    ->withoutOverlapping()
//                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'jobs_checker.log'));


                $schedule->command('single_email:start')
                    ->name('send_single_email')
                    ->everyMinute()
                    ->withoutOverlapping()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_single.log'));

                $schedule->command('bulkemail:start bulk')
                    ->name('send_bulk_email')
                    ->everyMinute()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_bulk.log'));

                $schedule->command('a_email:query')
                    ->name('a_email_query')
                    ->everyMinute()
                    ->withoutOverlapping()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_query.log'));

                $schedule->command('bulkemail:start group')
                    ->name('send_group_email')
                    ->everyMinute()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_group.log'));

                $schedule->command('bulkemail:p_start p_bulk')
                    ->name('send_perso_bulk_email')
                    ->everyMinute()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_perso_bulk.log'));

                $schedule->command('bulkemail:p_start p_group')
                    ->name('send_perso_group_email')
                    ->everyMinute()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'email_perso_group.log'));


                $schedule->command('social:reset')
                    ->name('Reset Social Media Credentials')
                    ->everyMinute()
                    ->appendOutputTo(storage_path('sms_log' . DIRECTORY_SEPARATOR . 'socialMediaReset.log'));


//                $schedule->command('backup:run --only-db')->hourly();
            }
    }

    /**
     * Register the Closure based commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        require base_path('routes/console.php');
    }
}
