<?php

namespace App\Console;

use App\Console\Commands\BackupData;
use App\Console\Commands\CheckEndDateOwner;
use App\Console\Commands\CollectSpendCycle;
use App\Console\Commands\ConvertImageToWebp;
use App\Console\Commands\Crawler;
use App\Console\Commands\CrawlerSite;
use App\Console\Commands\CrawlerToHostel;
use App\Console\Commands\CrawlHostelPost;
use App\Console\Commands\CrawlOhana;
use App\Console\Commands\CreateBillCustomer;
use App\Console\Commands\CreateBillMonth;
use App\Console\Commands\CreateBillMonth2;
use App\Console\Commands\DeleteDataOwner;
use App\Console\Commands\FixMoneyInfoQty;
use App\Console\Commands\FixMoneyInfoQtyAndAmount;
use App\Console\Commands\GenerateMissingMoneyInfoContract;
use App\Console\Commands\GenerateMoneyInfoContract;
use App\Console\Commands\GenerateSiteMap;
use App\Console\Commands\Geocode;
use App\Console\Commands\ImportData;
use App\Console\Commands\InactiveFindSession;
use App\Console\Commands\InactiveLead;
use App\Console\Commands\LongRunningCommand;
use App\Console\Commands\OptimizeImages;
use App\Console\Commands\PushNotification;
use App\Console\Commands\ReCalculateTkkd;
use App\Console\Commands\ReDeposit;
use App\Console\Commands\ReGenerateMoneyInfo;
use App\Console\Commands\RemindEmptyRoom;
use App\Console\Commands\RemindRenterBirthday;
use App\Console\Commands\RemoveDupRoom;
use App\Console\Commands\RestoreContract;
use App\Console\Commands\ReTkkdAll;
use App\Console\Commands\SendEmailReminOwnerOver;
use App\Console\Commands\SendNotificationSchedule;
use App\Console\Commands\SendReminOwnerEw;
use App\Console\Commands\SyncConversationV2;
use App\Console\Commands\TypeSpend;
use App\Console\Commands\UpdateCodeUser;
use App\Console\Commands\UpdateData;
use App\Console\Commands\UpdateRenterRoomHostel;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel {
	/**
	 * The Artisan commands provided by your application.
	 *
	 * @var array
	 */
	protected $commands = [
		//
		RemoveDupRoom::class,
		UpdateCodeUser::class,
		PushNotification::class,
		UpdateRenterRoomHostel::class,
		SendNotificationSchedule::class,
		Geocode::class,
		Crawler::class,
		ImportData::class,
		CheckEndDateOwner::class,
		SendEmailReminOwnerOver::class,
		CreateBillMonth::class,
		DeleteDataOwner::class,
		SendReminOwnerEw::class,
		OptimizeImages::class,
		ConvertImageToWebp::class,
		CrawlerSite::class,
		CrawlerToHostel::class,
		CreateBillMonth2::class,
//        TypeSpend::class,
		BackupData::class,
		ReCalculateTkkd::class,
		ReGenerateMoneyInfo::class,
		RemindRenterBirthday::class,
		GenerateMissingMoneyInfoContract::class,
		CreateBillCustomer::class,
		ReDeposit::class,
		FixMoneyInfoQtyAndAmount::class,
		FixMoneyInfoQty::class,
		RestoreContract::class,
		ReTkkdAll::class,
		InactiveLead::class,
		InactiveFindSession::class,
		CrawlHostelPost::class,
        SyncConversationV2::class,
        CrawlOhana::class,
        GenerateMoneyInfoContract::class,
        RemindEmptyRoom::class,
        CollectSpendCycle::class,
        UpdateData::class,
        GenerateSiteMap::class
		//  LongRunningCommand::class
	];

	/**
	 * Define the application's command schedule.
	 *
	 * @param \Illuminate\Console\Scheduling\Schedule $schedule
	 *
	 * @return void
	 */
	protected function schedule( Schedule $schedule ) {

		$schedule->command( 'push:notification' )
		         ->everyMinute()->withoutOverlapping()->appendOutputTo( 'push_notification_log' );

//	    $schedule->command('long-task:running')
//	             ->everyMinute()->withoutOverlapping()->runInBackground()->appendOutputTo('long_task_running');

		$schedule->command( 'notification:schedule' )
		         ->everyMinute()->withoutOverlapping()->appendOutputTo( 'push_notification_schedule_log' );

        $schedule->command('remind:empty')
            ->dailyAt('10:00')->withoutOverlapping()->appendOutputTo(storage_path('cron/queue_remind_empty.log'));

        $schedule->command('cp:cycle')
            ->dailyAt('08:00')->withoutOverlapping()->appendOutputTo(storage_path('cron/cp_cycle.log'));

//		$schedule->command( 'backup:run --only-db' )
//		         ->cron( '0 4,20 * * *' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/backup.log' ) );

//		$schedule->command( 'backup:run' )
//		         ->weeklyOn( 1, '04:00' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/backup_full.log' ) );

		$schedule->command( 'backup:monitor' )->daily()->at( '06:00' );
		$schedule->command( 'backup:clean' )->daily()->at( '06:00' );
		$schedule->command( 'lead:inactive' )->daily()->at( '03:00' );
		$schedule->command( 'telescope:prune' )->daily();

		$schedule->command( 'remind:birthday' )
		         ->dailyAt( '10:00' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/remind_birthday.log' ) );

		$schedule->command( 'check:end-date' )
		         ->dailyAt( '09:00' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/check_end_date.log' ) );
		$schedule->command( 'backup:data-user' )
		         ->hourly()->withoutOverlapping()->appendOutputTo( storage_path( 'cron/backup_data.log' ) );

//        $schedule->command('create:bill')
//            ->dailyAt('02:00')->withoutOverlapping()->appendOutputTo(storage_path('cron/create_bill.log'));

		$schedule->command( 'create:bill-new' )
		         ->twiceDaily( 2, 5 )
		         ->withoutOverlapping()->appendOutputTo( storage_path( 'cron/create_bill_new.log' ) );
		         
// 		$schedule->command( 'create:bill-new' )
// 		         ->everyMinute()
// 		         ->withoutOverlapping()->appendOutputTo( storage_path( 'cron/create_bill_new.log' ) );

		$schedule->command( 'crawl:post' )
		         ->cron( '0 */2 * * *' );

        $schedule->command( 'crawl:ohana' )
            ->cron('0 */2 * * *');

        $schedule->command( 'crawl:site --location=ho-chi-minh' )
            ->cron('0 */3 * * *');
        $schedule->command( 'crawl:site --location=ha-noi' )
            ->cron('0 */3 * * *');
        $schedule->command( 'crawl:site --location=da-nang' )
            ->cron('0 */3 * * *');
        $schedule->command( 'crawl:site --location=binh-duong' )
            ->cron('0 */3 * * *');
        $schedule->command( 'crawl:site --location=bac-ninh' )
            ->cron('0 */3 * * *');

		$schedule->command( 'inactive:find-session' )
		         ->daily()->at( '04:00' );

//        $schedule->command('re:tkkd')
//            ->dailyAt('01:00')->withoutOverlapping()->appendOutputTo(storage_path('cron/re_tkkd.log'));


		$schedule->command( 'remind-owner:ew' )
		         ->dailyAt( '07:00' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/create_bill.log' ) );

		$schedule->command( 'email:remind' )
		         ->dailyAt( '02:00' )->withoutOverlapping()->appendOutputTo( storage_path( 'cron/email_remind.log' ) );

		$schedule->command( 'activitylog:clean' )->daily();

	}

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