<?php

use App\Http\Controllers\FileController;
use App\Http\Controllers\FormsController;
use App\Http\Controllers\GeneralFormController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\PermissionsController;
use App\Http\Controllers\UsersController;
use App\Http\Controllers\RolesController;
use Illuminate\Support\Facades\Route;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
 */

Route::post('/form/submit', [FormsController::class, 'handleFormSubmission'])->name("form.submit");
require __DIR__ . '/auth.php';
Route::middleware('auth')->group(function () {

    Route::post('/upload', [FileController::class, 'upload'])->name('upload');
    Route::group(['prefix' => 'files', 'middleware' => ['web', 'auth']], function () {
        \UniSharp\LaravelFilemanager\Lfm::routes();
    });

    Route::middleware('auth')->get('/dashboard', function () {
        return view('backend.dashboard');
    })->name('dashboard');

    Route::middleware('auth')->prefix('admin')->group(function () {
        Route::get('/dashboard', function () {
            return view('backend.dashboard');
        })->name('admin.dashboard');
        Route::get('/', function () {
            return view('backend.dashboard');
        })->name('admin.dashboard');
        Route::get('/backup', function () {
            $databaseName = env('DB_DATABASE');
            $backupFileName = 'backup_' . date('Y-m-d_His') . '.sql';
            $backupPath = storage_path('app/' . $backupFileName);

// Create the mysqldump command as an array
            $command = [
                'mysqldump',
                '--user=' . env('DB_USERNAME'),
                '--password=' . env('DB_PASSWORD'),
                '--host=' . env('DB_HOST'),
                $databaseName,
            ];

            // Run the mysqldump command using Symfony Process
            $process = new Process($command);
            $process->setOutputFile($backupPath);
            $process->run();

            if (!$process->isSuccessful()) {
                throw new ProcessFailedException($process);
            }

            // Provide the download link for the backup file
            return response()->download($backupPath)->deleteFileAfterSend(true);

        })->name('backup.db');
    });
    Route::prefix("form")->group(function () {
        Route::get('/tables', [GeneralFormController::class, 'tables'])->name('form.tables');
        Route::get('/', [GeneralFormController::class, 'create'])->name('form.create');
        Route::get('/store', [GeneralFormController::class, 'store'])->name('form.store');
        Route::get('/make-table-nullable', [GeneralFormController::class, 'getTableNullablecreate'])->name('table.create');
        Route::get('/store', [GeneralFormController::class, 'store'])->name('form.store');
    });
    Route::get('/shortcodes', function () {
        return view("backend.shortcodes");
    })->name('shortcodes');
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');

    //roles and permissions

    Route::group([], function () {
        Route::resource('user', UsersController::class)->names('user');
        Route::resource('role', RolesController::class)->names('role');
        Route::resource('permission', PermissionsController::class)->names('permission')->only(['index','destroy']);
    });

    Route::prefix("permissions")->group(function () {
        Route::resource('/permissions', PermissionsController::class);
        Route::get('/generate-permissions', [PermissionsController::class, 'generatePermissionFromRoutes'])->name('permission.generatePermissionFromRoutes');
    });

    require __DIR__ . '/route.settings.php';
    require __DIR__ . '/route.menulocations.php';
    require __DIR__ . '/route.menuitems.php';
    require __DIR__ . '/route.provinces.php';
    require __DIR__ . '/route.news_type.php';
    require __DIR__ . '/route.newscategories.php';
    require __DIR__ . '/route.news.php';
    require __DIR__ . '/route.authors.php';
    require __DIR__ . '/route.economies.php';
    require __DIR__ . '/route.videos.php';
    require __DIR__ . '/route.horoscope.php';
    require __DIR__ . '/route.articles.php';
    require __DIR__ . '/route.teams.php';
    require __DIR__ . '/route.advertisements.php';
    require __DIR__ . '/route.adcategories.php';
    require __DIR__ . '/route.roles.php';
    require __DIR__ . '/route.permissions.php';
    require __DIR__ . '/route.users.php';
    require __DIR__ . '/route.popups.php';
    require __DIR__ . '/route.comments.php';


});
require __DIR__ . '/route.client.php';

// Route::fallback([WebsiteController::class, 'fallback']);