<?php

use App\Jobs\SyncBackendDataPool;
use App\Jobs\TransformDataPoolToProduction;
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schedule;

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

/**
 * Backend Data Pool Sync Scheduling
 *
 * - Incremental Sync: Läuft alle 6 Stunden (nur neue/geänderte Daten)
 * - Full Sync: Läuft jeden Sonntag um 3 Uhr morgens (kompletter Rebuild)
 */

// Incremental Sync: Alle 6 Stunden
Schedule::job(new SyncBackendDataPool(fullSync: false, batchSize: 1000))
    ->everySixHours()
    ->name('sync-backend-data-pool-incremental')
    ->description('Sync new/updated backend transactions to data pool')
    ->withoutOverlapping(1800); // Max 30 Minuten Lock (1800 Sekunden)

// Full Sync: Jeden Sonntag um 3 Uhr morgens
Schedule::job(new SyncBackendDataPool(fullSync: true, batchSize: 1000))
    ->weeklyOn(0, '03:00') // Sonntag, 3:00 Uhr
    ->name('sync-backend-data-pool-full')
    ->description('Full sync and rebuild of backend data pool')
    ->withoutOverlapping(3600); // Max 1 Stunde Lock (3600 Sekunden)

/**
 * Data Pool Transformation Scheduling (Stufe 2)
 *
 * - Läuft 30 Minuten nach jedem Incremental Sync
 * - Transformiert Daten aus backend_data_pool → companies + transactions
 */

// Transformation: 30 Minuten nach jedem Sync (0:30, 6:30, 12:30, 18:30)
Schedule::job(new TransformDataPoolToProduction(batchSize: 100))
    ->cron('30 */6 * * *') // :30 jede 6 Stunden
    ->name('transform-data-pool-to-production')
    ->description('Transform data pool into companies and transactions')
    ->withoutOverlapping(1800); // Max 30 Minuten Lock
