<?php

declare(strict_types=1);

namespace App\Providers;

use App\Services\CashFlowService;
use App\Services\Dashboard\DashboardCacheService;
use App\Services\Metrics\CashFlowMetricsService;
use App\Services\Metrics\CollectionMetricsService;
use App\Services\Metrics\DelinquencyMetricsService;
use App\Services\Metrics\PortfolioMetricsService;
use Illuminate\Support\ServiceProvider;

class DashboardServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
        // Cache Service (singleton para mantener estado)
        $this->app->singleton(DashboardCacheService::class, function ($app) {
            return new DashboardCacheService;
        });

        // Metrics Services
        $this->app->singleton(PortfolioMetricsService::class, function ($app) {
            return new PortfolioMetricsService(
                $app->make(DashboardCacheService::class)
            );
        });

        $this->app->singleton(DelinquencyMetricsService::class, function ($app) {
            return new DelinquencyMetricsService(
                $app->make(DashboardCacheService::class)
            );
        });

        $this->app->singleton(CashFlowMetricsService::class, function ($app) {
            return new CashFlowMetricsService(
                $app->make(DashboardCacheService::class),
                $app->make(CashFlowService::class)
            );
        });

        $this->app->singleton(CollectionMetricsService::class, function ($app) {
            return new CollectionMetricsService(
                $app->make(DashboardCacheService::class)
            );
        });
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {
        //
    }
}
