<?php

namespace App\Http\Middleware;

use App\Services\Install\InstallService;
use Closure;
use Illuminate\Http\Request;

/**
 * Kurulmamışsa tüm web isteklerini /install'a yönlendirir (PRC-867).
 *
 * Web grubunun EN BAŞINDA çalışır: kurulu değilken DB'ye dokunan middleware'lerden
 * (ResolveBrand vb.) ÖNCE redirect döner — fresh install'da DB migrate edilmemiş
 * olabilir, bu yüzden guard yalnız kilit dosyasını okur (DB'siz).
 */
class EnsureInstalled
{
    public function __construct(private readonly InstallService $install)
    {
    }

    public function handle(Request $request, Closure $next)
    {
        // Dev/test ortamı migrate:fresh --seed ile kurulur; sihirbaz yalnız
        // production dağıtımı içindir → local/testing'de asla yönlendirme.
        if ($this->install->isInstalled()
            || app()->environment('local', 'testing')
            || $request->is('install', 'install/*')) {
            return $next($request);
        }

        return redirect('/install');
    }
}
