<?php

use App\Http\Middleware\CheckPermission;
use App\Http\Middleware\EnsureProviderIsAccepted;
use App\Http\Middleware\PerformanceMonitor;
use App\Http\Middleware\SetUserLanguage;
use App\Tasks\DeleteExpiredTokens;
use App\Tasks\SendPushNotificationsTask;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Support\Facades\Log;
use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // $middleware->statefulApi();
        $middleware->append([SetUserLanguage::class, PerformanceMonitor::class]);
        $middleware->alias([
            'permission'        => CheckPermission::class,
            'ability'           => CheckForAnyAbility::class,
            'provider.accepted' => EnsureProviderIsAccepted::class,
        ]);
    })
    ->withSchedule(function (Schedule $schedule) {
        $schedule->call(new DeleteExpiredTokens)->everyMinute();

        $sendPushNotifications = function () {
            try {
                app(SendPushNotificationsTask::class)();
            } catch (Throwable $e) {
                Log::error('Falha ao resolver SendPushNotificationsTask: '.$e->getMessage(), [
                    'exception' => $e,
                ]);
            }
        };

        $schedule->call($sendPushNotifications)->dailyAt('08:00');
        $schedule->call($sendPushNotifications)->dailyAt('13:00');
        $schedule->call($sendPushNotifications)->dailyAt('19:00');
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })
    ->create();
