<?php

namespace App\Console\Commands;

use App\Models\AlertMailRule;
use Illuminate\Console\Scheduling\Schedule;

class ScheduleList
{
    // public function schedule(Schedule $schedule): void
    // {
    //   // Invoice Report Scheduling
    //     $scheduleType = AlertMailRule::where('module', 'InvoiceValidation')
    //         ->where('rule_name', 'InvoiceMail')
    //         ->value('schedule_type');

    //     switch ($scheduleType) {
    //         case 'Live':
    //             $schedule->command('send:invoice-report')->everyMinute()->runInBackground();
    //             break;
    //         case 'Hourly':
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //         // case 'Daily':
    //         //     $schedule->command('send:invoice-report')->daily()->runInBackground(); //->dailyAt('07:59')
    //         //     break;
    //         case 'Daily':
    //             $schedule->command('send:invoice-report')->dailyAt('07:59')->runInBackground(); //->dailyAt('07:59')
    //             break;
    //         default:
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //     }

    //     $SerialscheduleType = AlertMailRule::where('module', 'InvoiceValidation')
    //         ->where('rule_name', 'SerialInvoiceMail')
    //         ->value('schedule_type');

    //     switch ($SerialscheduleType) {
    //         case 'Live':
    //             $schedule->command('send:invoice-report')->everyMinute()->runInBackground();
    //             break;
    //         case 'Hourly':
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //         // case 'Daily':
    //         //     $schedule->command('send:invoice-report')->daily()->runInBackground(); //->dailyAt('07:59')
    //         //     break;
    //         case 'Daily':
    //             $schedule->command('send:invoice-report')->dailyAt('07:59')->runInBackground(); //->dailyAt('07:59')
    //             break;
    //         default:
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //     }


    //     $materialscheduleType = AlertMailRule::where('module', 'InvoiceValidation')
    //         ->where('rule_name', 'MaterialInvoiceMail')
    //         ->value('schedule_type');

    //     switch ($materialscheduleType) {
    //         case 'Live':
    //             $schedule->command('send:invoice-report')->everyMinute()->runInBackground();
    //             break;
    //         case 'Hourly':
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //         // case 'Daily':
    //         //     $schedule->command('send:invoice-report')->daily()->runInBackground(); //->dailyAt('07:59')
    //         //     break;
    //         case 'Daily':
    //             $schedule->command('send:invoice-report')->dailyAt('07:59')->runInBackground(); //->dailyAt('07:59')
    //             break;
    //         default:
    //             $schedule->command('send:invoice-report')->hourly()->runInBackground();
    //             break;
    //     }

    //     // Production Report Scheduling
    //     $productionScheduleType = AlertMailRule::where('module', 'ProductionQuantities')
    //         ->where('rule_name', 'ProductionMail')
    //         ->value('schedule_type');

    //     switch ($productionScheduleType) {
    //         case 'Live':
    //             $schedule->command('send:production-report')->everyMinute()->runInBackground();
    //             break;
    //         case 'Hourly':
    //             $schedule->command('send:production-report')->hourly()->runInBackground();
    //             break;
    //         case 'Daily':
    //             $schedule->command('send:production-report')->dailyAt('07:59')->runInBackground();
    //             break;
    //         default:
    //             $schedule->command('send:production-report')->hourly()->runInBackground();
    //             break;
    //     }
    // }

    public function schedule(Schedule $schedule): void
    {
        // Define the rules you want to schedule
        $rules = [
            [
                'module'    => 'InvoiceValidation',
                'rule_name' => 'InvoiceMail',
                'argument'  => 'InvoiceMail',
            ],
            [
                'module'    => 'InvoiceValidation',
                'rule_name' => 'SerialInvoiceMail',
                'argument'  => 'SerialInvoiceMail',
            ],
            [
                'module'    => 'InvoiceValidation',
                'rule_name' => 'MaterialInvoiceMail',
                'argument'  => 'MaterialInvoiceMail',
            ],
        ];

        // Loop through each rule and schedule accordingly
        foreach ($rules as $rule) {
            $scheduleType = AlertMailRule::where('module', $rule['module'])
                ->where('rule_name', $rule['rule_name'])
                ->value('schedule_type');

            switch ($scheduleType) {
                case 'Live':
                    $schedule->command("send:invoice-report {$rule['argument']}")->everyMinute()->runInBackground();
                    break;
                case 'Hourly':
                    $schedule->command("send:invoice-report {$rule['argument']}")->hourly()->runInBackground();
                    break;
                case 'Daily':
                    $schedule->command("send:invoice-report {$rule['argument']}")->dailyAt('07:59')->runInBackground();
                    break;
                default:
                    $schedule->command("send:invoice-report {$rule['argument']}")->hourly()->runInBackground();
                    break;
            }
        }

        // Production Report Scheduling
        $productionScheduleType = AlertMailRule::where('module', 'ProductionQuantities')
            ->where('rule_name', 'ProductionMail')
            ->value('schedule_type');

        switch ($productionScheduleType) {
            case 'Live':
                $schedule->command('send:production-report')->everyMinute()->runInBackground();
                break;
            case 'Hourly':
                $schedule->command('send:production-report')->hourly()->runInBackground();
                break;
            case 'Daily':
                $schedule->command('send:production-report')->dailyAt('07:59')->runInBackground();
                break;
            default:
                $schedule->command('send:production-report')->hourly()->runInBackground();
                break;
        }
    }
}
