<?php

namespace Tests;

use Illuminate\Contracts\Console\Kernel;
use Illuminate\Foundation\Application;

trait CreatesApplication
{
    public function createApplication(): Application
    {
        $app = require __DIR__.'/../bootstrap/app.php';
        $app->make(Kernel::class)->bootstrap();

        if ($app->environment('testing')) {
            $connection = (string) config('database.default', 'mysql');
            $database = (string) config("database.connections.{$connection}.database", '');

            if ($connection === 'sqlite') {
                return $app;
            }

            if ($database === '' || ! preg_match('/_test$/i', $database)) {
                throw new \RuntimeException(
                    'PHPUnit must use a dedicated database whose name ends with "_test". '.
                    "Current [{$connection}] database: \"{$database}\". ".
                    'Set DB_DATABASE=hrms_saas_laravel_test in phpunit.xml / .env.testing so RefreshDatabase cannot wipe your dev data.'
                );
            }
        }

        return $app;
    }
}
