<?php

namespace App\Console;

use App\Console\Commands\AutoDumpLoad;
use App\Console\Commands\CheckHangJob;
use App\Console\Commands\CleanupExpiredOtps;
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\MailCampaignStatusCheckFromSendinBlue;
use App\Console\Commands\MonitorUssdPaymentSubscriptions;
use App\Console\Commands\PeopleFaker;
use App\Console\Commands\ProcessPersonalisedMailBlast;
use App\Console\Commands\PushMailCampaignAndContactsToSendinBlue;
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\Console\Commands\PasswordExpiryNotification;
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,
//        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,
//        Backup::class,

        ReportProcessor::class,
        socialReset::class,
        MonitorUssdPaymentSubscriptions::class,
        ProcessPersonalisedMailBlast::class,
        PasswordExpiryNotification::class,
        PushMailCampaignAndContactsToSendinBlue::class,
        MailCampaignStatusCheckFromSendinBlue::class,
        CleanupExpiredOtps::class,

    ];

    /**
     * Define the application's command schedule.
     *
     * @param Schedule $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('ussd:monitor')->daily()->withoutOverlapping()->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'ussd.log'));

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

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

        $schedule->command(ProcessPersonalisedMailBlast::class)->everyMinute();
        $schedule->command(PasswordExpiryNotification::class)->dailyAt('8:30')->withoutOverlapping();

        $schedule->command(PushMailCampaignAndContactsToSendinBlue::class)->everyMinute()->withoutOverlapping();
        $schedule->command(MailCampaignStatusCheckFromSendinBlue::class)->everyMinute()->withoutOverlapping();

        $schedule->command(CleanupExpiredOtps::class)->weeklyOn(1, '00:00')->withoutOverlapping();

//        if (ServiceTools::can_run_service()) {
//            //executing dump autoload every 30min
//            $schedule->command('dump:autoload')
//                ->name('dump_autoload')
//                ->everyThirtyMinutes()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'dump_autoload.log'));
//
//            $schedule->command('partition:logs')
//                ->name('partition_logs')
//                ->twiceMonthly()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'partition_logs.log'));
//
//
////                $schedule->command('bulksms:start')
////                    ->name('speedy_bulk_s')
////                    ->everyMinute()
//////                    ->withoutOverlapping()
////                    ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'speedy_sms_bulk.log'));
//
//
//            $schedule->command('bulksms:p_start')
//                ->name('speedy_bulk_p')
//                ->everyMinute()
////                    ->withoutOverlapping()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'speedy_sms_perso_bulk.log'));
//

//
////                $schedule->command('palert:send_email')
////                    ->name('psend_error_alert')
////                    ->everyTenMinutes()
////                    ->withoutOverlapping()
////                    ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'error_alert.log'));
//
////                $schedule->command('palert:check_jobs')
////                    ->name('palert_check_jobs')
////                    ->everyMinute()
////                    ->withoutOverlapping()
////                    ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'jobs_checker.log'));
//
//
//            $schedule->command('single_email:start')
//                ->name('send_single_email')
//                ->everyMinute()
//                ->withoutOverlapping()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_single.log'));
//
//            $schedule->command('bulkemail:start bulk')
//                ->name('send_bulk_email')
//                ->everyMinute()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_bulk.log'));
//
//            $schedule->command('a_email:query')
//                ->name('a_email_query')
//                ->everyMinute()
//                ->withoutOverlapping()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_query.log'));
//
//            $schedule->command('bulkemail:start group')
//                ->name('send_group_email')
//                ->everyMinute()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_group.log'));
//
//            $schedule->command('bulkemail:p_start p_bulk')
//                ->name('send_perso_bulk_email')
//                ->everyMinute()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_perso_bulk.log'));
//
//            $schedule->command('bulkemail:p_start p_group')
//                ->name('send_perso_group_email')
//                ->everyMinute()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'email_perso_group.log'));
//
//
//            $schedule->command('social:reset')
//                ->name('Reset Social Media Credentials')
//                ->everyMinute()
//                ->appendOutputTo(storage_path('logs' . DIRECTORY_SEPARATOR . 'socialMediaReset.log'));
//
//
////            $schedule->command('backup:run --only-db')->hourly();
//
//            //schedule the ussd monitoring to occur
//            $schedule->command('ussd:monitor')->daily();
//        }
    }

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