<?php

/**
 * Laravel Application Entry Point - VERSÃO CORRIGIDA
 * Verifica se o sistema está instalado e redireciona para o instalador se necessário
 */

use Illuminate\Http\Request;

// Verificar se o sistema está instalado
function isSystemInstalled() {
    // Verificar arquivo .env
    if (!file_exists(__DIR__ . '/.env')) {
        return false;
    }

    // Verificar se as chaves estão configuradas
    $envContent = file_get_contents(__DIR__ . '/.env');
    if (strpos($envContent, 'APP_KEY=base64:') === false) {
        return false;
    }

    // Verificar se o banco está configurado
    if (strpos($envContent, 'DB_DATABASE=') === false ||
        strpos($envContent, 'DB_USERNAME=') === false) {
        return false;
    }

    // CORREÇÃO: Verificar se existe um arquivo de flag de instalação
    if (file_exists(__DIR__ . '/.installed')) {
        return true;
    }

    // Verificar se as migrations foram executadas (método mais robusto)
    try {
        // Carregar o ambiente Laravel
        require_once __DIR__ . '/vendor/autoload.php';
        $app = require_once __DIR__ . '/bootstrap/app.php';

        // Verificar se a tabela users existe
        $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
        $kernel->bootstrap();

        if (\Illuminate\Support\Facades\Schema::hasTable('users')) {
            // Verificar se há pelo menos um usuário admin
            $userCount = \App\Models\User::count();
            if ($userCount > 0) {
                // Criar arquivo de flag para evitar verificações futuras
                file_put_contents(__DIR__ . '/.installed', date('Y-m-d H:i:s'));
                return true;
            }
        }

        return false;
    } catch (\Exception $e) {
        // Se houver erro na verificação do banco, mas o .env está OK,
        // assumir que está instalado para evitar loops
        error_log("Erro na verificação de instalação: " . $e->getMessage());
        
        // Se existe composer.lock e .env configurado, provavelmente está instalado
        if (file_exists(__DIR__ . '/composer.lock') && 
            strpos($envContent, 'DB_DATABASE=nanodelivery_2026') !== false) {
            file_put_contents(__DIR__ . '/.installed', date('Y-m-d H:i:s'));
            return true;
        }
        
        return false;
    }
}

// Verificar se é uma requisição para o instalador
function isInstallerRequest() {
    $uri = $_SERVER['REQUEST_URI'] ?? '';
    return strpos($uri, '/install') === 0 ||
           strpos($uri, '/check') === 0 ||
           strpos($uri, '/install.php') === 0 ||
           strpos($uri, '/check.php') === 0;
}

// CORREÇÃO: Adicionar verificação para forçar reinstalação
function isForceReinstall() {
    return isset($_GET['force_install']) && $_GET['force_install'] === '1';
}

// Lógica principal corrigida
if (isForceReinstall()) {
    // Remover flag de instalação se forçar reinstalação
    if (file_exists(__DIR__ . '/.installed')) {
        unlink(__DIR__ . '/.installed');
    }
    header('Location: /install.php');
    exit;
}

// Redirecionar para o instalador apenas se realmente não estiver instalado
if (!isSystemInstalled() && !isInstallerRequest()) {
    header('Location: /install.php');
    exit;
}

// Se chegou até aqui, o sistema está instalado ou é uma requisição do instalador
if (!isSystemInstalled() && isInstallerRequest()) {
    // Não instalado - continuar para o instalador
    // (o código do instalador será executado)
    exit;
}

/**
 * Laravel - The PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylor@laravel.com>
 */

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

$app = require_once __DIR__.'/bootstrap/app.php';

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Request::capture()
)->send();

$kernel->terminate($request, $response);