<?php
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Backend\AdminsController;
use App\Http\Controllers\Backend\Auth\ForgotPasswordController;
use App\Http\Controllers\Backend\Auth\LoginController;
use App\Http\Controllers\GenerateDataMasterController;
use App\Http\Controllers\Backend\DashboardController;
use App\Http\Controllers\Backend\RolesController;
use App\Http\Controllers\Backend\MenuRoleController;
use App\Http\Controllers\Forms\FormUpCountryController;
use App\Http\Controllers\Master\RayonController;
use App\Http\Controllers\Master\CostCentreController;
use App\Http\Controllers\Master\CategoryController;
use App\Http\Controllers\Forms\FormVehicleController;
use App\Http\Controllers\Forms\FormEntertainmentPresentationController;
use App\Http\Controllers\Forms\FormMeetingSeminarController;
use App\Http\Controllers\Forms\FormOtherController;
use App\Http\Controllers\Backend\AuditTrailController;
use App\Http\Controllers\Backend\BudgetControlController;
use App\Http\Controllers\Backend\ReportController;
use App\Http\Controllers\Master\RegionController;
use App\Http\Controllers\Master\CabangController;
use App\Http\Controllers\Backend\NextCloudController;
use Illuminate\Http\Request;

Auth::routes();
require __DIR__ . '/api.php';

Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
    // Login Routes.
    Route::post('/login/submit', [LoginController::class, 'login'])->name('login.submit');
    Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
    // Logout Routes.
    Route::post('/logout/submit', [LoginController::class, 'logout'])->name('logout.submit');
});


/**
 * Admin routes
 */
Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth:admin', 'menu']], function () {
    Route::resource('admins', AdminsController::class);
    Route::get('/admins/expense/{user_id}', [AdminsController::class, 'expense'])->name('admins.expense');
    Route::resource('roles', RolesController::class);
    Route::get('/', [DashboardController::class, 'index'])->name('dashboard');

    Route::get('/nextcloud/download/{file}', [NextCloudController::class, 'download'])->name('nextcloud.download');

    // Rayon
    Route::get('/rayon', [RayonController::class, 'index'])->name('rayon.index');
    Route::get('/rayon/create', [RayonController::class, 'create'])->name('rayon.create');
    Route::post('/rayon/store', [RayonController::class, 'store'])->name('rayon.store');
    Route::get('/rayon/edit/{id}', [RayonController::class, 'edit'])->name('rayon.edit');
    Route::put('/rayon/update/{id}', [RayonController::class, 'update'])->name('rayon.update');
    Route::delete('/rayon/destroy/{id}', [RayonController::class, 'destroy'])->name('rayon.destroy');

    // Cost Centre
    Route::get('/cost', [CostCentreController::class, 'index'])->name('cost.index');
    Route::get('/cost/create', [CostCentreController::class, 'create'])->name('cost.create');
    Route::post('/cost/store', [CostCentreController::class, 'store'])->name('cost.store');
    Route::get('/cost/edit/{id}', [CostCentreController::class, 'edit'])->name('cost.edit');
    Route::put('/cost/update/{id}', [CostCentreController::class, 'update'])->name('cost.update');
    Route::delete('/cost/destroy/{id}', [CostCentreController::class, 'destroy'])->name('cost.destroy');

    // Category
    Route::get('/category', [CategoryController::class, 'index'])->name('category.index');
    Route::get('/category/create', [CategoryController::class, 'create'])->name('category.create');
    Route::post('/category/store', [CategoryController::class, 'store'])->name('category.store');
    Route::get('/category/edit/{id}', [CategoryController::class, 'edit'])->name('category.edit');
    Route::put('/category/update/{id}', [CategoryController::class, 'update'])->name('category.update');
    Route::delete('/category/destroy/{id}', [CategoryController::class, 'destroy'])->name('category.destroy');

    // Region
    Route::get('/region', [RegionController::class, 'index'])->name('region.index');
    Route::get('/region/create', [RegionController::class, 'create'])->name('region.create');
    Route::post('/region/store', [RegionController::class, 'store'])->name('region.store');
    Route::get('/region/edit/{id}', [RegionController::class, 'edit'])->name('region.edit');
    Route::put('/region/update/{id}', [RegionController::class, 'update'])->name('region.update');
    Route::delete('/region/destroy/{id}', [RegionController::class, 'destroy'])->name('region.destroy');

    // Cabang
    Route::get('/cabang', [CabangController::class, 'index'])->name('cabang.index');
    Route::get('/cabang/create', [CabangController::class, 'create'])->name('cabang.create');
    Route::post('/cabang/store', [CabangController::class, 'store'])->name('cabang.store');
    Route::get('/cabang/edit/{id}', [CabangController::class, 'edit'])->name('cabang.edit');
    Route::put('/cabang/update/{id}', [CabangController::class, 'update'])->name('cabang.update');
    Route::delete('/cabang/destroy/{id}', [CabangController::class, 'destroy'])->name('cabang.destroy');

    // Audit Trail
    Route::get('/audit-trails', [AuditTrailController::class, 'index'])->name('audit-trail.index');
    
})->middleware(['auth:admin']);

Route::middleware(['auth:admin', 'menu'])->group(function () {
    Route::get('/', [DashboardController::class, 'index'])->name('dashboard.index');
    Route::post('/mark_all_read', [DashboardController::class, 'mark_all_read'])->name('dashboard.mark_all_read');

    Route::prefix('budgets')->group(function () {
        Route::get('/', [BudgetControlController::class, 'index'])->name('budget_control');
        Route::get('/log', [BudgetControlController::class, 'log'])->name('budget_control.log');
        Route::get('/detail/{id}', [BudgetControlController::class, 'detail'])->name('budget_control.detail');
        Route::get('/view/{id}', [BudgetControlController::class, 'view'])->name('budget_control.view');
        Route::get('/create', [BudgetControlController::class, 'create'])->name('budget_control.create');
        Route::post('/store', [BudgetControlController::class, 'store'])->name('budget_control.store');
        Route::get('/edit/{id}', [BudgetControlController::class, 'edit'])->name('budget_control.edit');
        Route::put('/update/{id}', [BudgetControlController::class, 'update'])->name('budget_control.update');
        Route::delete('/destroy/{id}', [BudgetControlController::class, 'destroy'])->name('budget_control.destroy');
    });

    Route::prefix('reports')->group(function () {
        Route::get('/upcountry', [ReportController::class, 'upcountry'])->name('reports.upcountry');
        Route::get('/vehicle', [ReportController::class, 'vehicle'])->name('reports.vehicle');
        Route::get('/entertainment', [ReportController::class, 'entertainment'])->name('reports.entertainment');
        Route::get('/meeting', [ReportController::class, 'meeting'])->name('reports.meeting');
        Route::get('/others', [ReportController::class, 'others'])->name('reports.others');
        Route::get('/all', [ReportController::class, 'all'])->name('reports.all');

        Route::get('/jurnal', [ReportController::class, 'jurnal'])->name('reports.jurnal');
        Route::get('/generateJurnal', [ReportController::class, 'generateJurnal'])->name('reports.jurnal.generate');
    });

    // Forms
    Route::prefix('forms')->group(function () {
        // Up Country
        Route::get('/up-country', [FormUpCountryController::class, 'index'])->name('forms.up-country');
        Route::get('/up-country/detail/{id}', [FormUpCountryController::class, 'detail'])->name('forms.up-country.detail');
        Route::get('/up-country/view/{id}', [FormUpCountryController::class, 'view'])->name('forms.up-country.view');
        Route::get('/up-country/create', [FormUpCountryController::class, 'create'])->name('forms.up-country.create');
        Route::post('/up-country/store', [FormUpCountryController::class, 'store'])->name('forms.up-country.store');
        Route::get('/up-country/edit/{id}', [FormUpCountryController::class, 'edit'])->name('forms.up-country.edit');
        Route::put('/up-country/update/{id}', [FormUpCountryController::class, 'update'])->name('forms.up-country.update');
        Route::delete('/up-country/destroy/{id}', [FormUpCountryController::class, 'destroy'])->name('forms.up-country.destroy');
        Route::put('/up-country/approve/{id}', [FormUpCountryController::class, 'approve'])->name('forms.up-country.approve');
        Route::put('/up-country/approve2/{id}', [FormUpCountryController::class, 'approve2'])->name('forms.up-country.approve2');
        Route::put('/up-country/reject/{id}', [FormUpCountryController::class, 'reject'])->name('forms.up-country.reject');
        Route::put('/up-country/final-approve/{id}', [FormUpCountryController::class, 'finalApprove'])->name('forms.up-country.final-approve');
        Route::put('/up-country/open/{id}', [FormUpCountryController::class, 'open'])->name('forms.up-country.open');

        // Vehicle Running Cost
        Route::get('/vehicle-running-cost', [FormVehicleController::class, 'index'])->name('forms.vehicle');
        Route::get('/vehicle-running-cost/detail/{id}', [FormVehicleController::class, 'detail'])->name('forms.vehicle.detail');
        Route::get('/vehicle-running-cost/view/{id}', [FormVehicleController::class, 'view'])->name('forms.vehicle.view');
        Route::get('/vehicle-running-cost/create', [FormVehicleController::class, 'create'])->name('forms.vehicle.create');
        Route::post('/vehicle-running-cost/store', [FormVehicleController::class, 'store'])->name('forms.vehicle.store');
        Route::get('/vehicle-running-cost/edit/{id}', [FormVehicleController::class, 'edit'])->name('forms.vehicle.edit');
        Route::put('/vehicle-running-cost/update/{id}', [FormVehicleController::class, 'update'])->name('forms.vehicle.update');
        Route::delete('/vehicle-running-cost/destroy/{id}', [FormVehicleController::class, 'destroy'])->name('forms.vehicle.destroy');
        Route::put('/vehicle-running-cost/approve/{id}', [FormVehicleController::class, 'approve'])->name('forms.vehicle.approve');
        Route::put('/vehicle-running-cost/approve2/{id}', [FormVehicleController::class, 'approve2'])->name('forms.vehicle.approve2');
        Route::put('/vehicle-running-cost/reject/{id}', [FormVehicleController::class, 'reject'])->name('forms.vehicle.reject');
        Route::put('/vehicle-running-cost/final-approve/{id}', [FormVehicleController::class, 'finalApprove'])->name('forms.vehicle.final-approve');
        Route::put('/vehicle-running-cost/open/{id}', [FormVehicleController::class, 'open'])->name('forms.vehicle.open');

        // Entertainment & Presentation
        Route::get('/entertainment-presentation', [FormEntertainmentPresentationController::class, 'index'])->name('forms.entertainment');
        Route::get('/entertainment-presentation/detail/{id}', [FormEntertainmentPresentationController::class, 'detail'])->name('forms.entertainment.detail');
        Route::get('/entertainment-presentation/view/{id}', [FormEntertainmentPresentationController::class, 'view'])->name('forms.entertainment.view');
        Route::get('/entertainment-presentation/create', [FormEntertainmentPresentationController::class, 'create'])->name('forms.entertainment.create');
        Route::post('/entertainment-presentation/store', [FormEntertainmentPresentationController::class, 'store'])->name('forms.entertainment.store');
        Route::get('/entertainment-presentation/edit/{id}', [FormEntertainmentPresentationController::class, 'edit'])->name('forms.entertainment.edit');
        Route::put('/entertainment-presentation/update/{id}', [FormEntertainmentPresentationController::class, 'update'])->name('forms.entertainment.update');
        Route::delete('/entertainment-presentation/destroy/{id}', [FormEntertainmentPresentationController::class, 'destroy'])->name('forms.entertainment.destroy');
        Route::put('/entertainment-presentation/approve/{id}', [FormEntertainmentPresentationController::class, 'approve'])->name('forms.entertainment.approve');
        Route::put('/entertainment-presentation/approve2/{id}', [FormEntertainmentPresentationController::class, 'approve2'])->name('forms.entertainment.approve2');
        Route::put('/entertainment-presentation/reject/{id}', [FormEntertainmentPresentationController::class, 'reject'])->name('forms.entertainment.reject');
        Route::put('/entertainment-presentation/final-approve/{id}', [FormEntertainmentPresentationController::class, 'finalApprove'])->name('forms.entertainment.final-approve');
        Route::put('/entertainment-presentation/open/{id}', [FormEntertainmentPresentationController::class, 'open'])->name('forms.entertainment.open');

        // Meeting & Seminar
        Route::get('/meeting-seminar', [FormMeetingSeminarController::class, 'index'])->name('forms.meeting');
        Route::get('/meeting-seminar/detail/{id}', [FormMeetingSeminarController::class, 'detail'])->name('forms.meeting.detail');
        Route::get('/meeting-seminar/view/{id}', [FormMeetingSeminarController::class, 'view'])->name('forms.meeting.view');
        Route::get('/meeting-seminar/create', [FormMeetingSeminarController::class, 'create'])->name('forms.meeting.create');
        Route::post('/meeting-seminar/store', [FormMeetingSeminarController::class, 'store'])->name('forms.meeting.store');
        Route::get('/meeting-seminar/edit/{id}', [FormMeetingSeminarController::class, 'edit'])->name('forms.meeting.edit');
        Route::put('/meeting-seminar/update/{id}', [FormMeetingSeminarController::class, 'update'])->name('forms.meeting.update');
        Route::delete('/meeting-seminar/destroy/{id}', [FormMeetingSeminarController::class, 'destroy'])->name('forms.meeting.destroy');
        Route::put('/meeting-seminar/approve/{id}', [FormMeetingSeminarController::class, 'approve'])->name('forms.meeting.approve');
        Route::put('/meeting-seminar/approve2/{id}', [FormMeetingSeminarController::class, 'approve2'])->name('forms.meeting.approve2');
        Route::put('/meeting-seminar/reject/{id}', [FormMeetingSeminarController::class, 'reject'])->name('forms.meeting.reject');
        Route::put('/meeting-seminar/final-approve/{id}', [FormMeetingSeminarController::class, 'finalApprove'])->name('forms.meeting.final-approve');
        Route::put('/meeting-seminar/open/{id}', [FormMeetingSeminarController::class, 'open'])->name('forms.meeting.open');

        // Other
        Route::get('/other', [FormOtherController::class, 'index'])->name('forms.other');
        Route::get('/other/detail/{id}', [FormOtherController::class, 'detail'])->name('forms.other.detail');
        Route::get('/other/view/{id}', [FormOtherController::class, 'view'])->name('forms.other.view');
        Route::get('/other/create', [FormOtherController::class, 'create'])->name('forms.other.create');
        Route::post('/other/store', [FormOtherController::class, 'store'])->name('forms.other.store');
        Route::get('/other/edit/{id}', [FormOtherController::class, 'edit'])->name('forms.other.edit');
        Route::put('/other/update/{id}', [FormOtherController::class, 'update'])->name('forms.other.update');
        Route::delete('/other/destroy/{id}', [FormOtherController::class, 'destroy'])->name('forms.other.destroy');
        Route::put('/other/approve/{id}', [FormOtherController::class, 'approve'])->name('forms.other.approve');
        Route::put('/other/approve2/{id}', [FormOtherController::class, 'approve2'])->name('forms.other.approve2');
        Route::put('/other/reject/{id}', [FormOtherController::class, 'reject'])->name('forms.other.reject');
        Route::put('/other/final-approve/{id}', [FormOtherController::class, 'finalApprove'])->name('forms.other.final-approve');
        Route::put('/other/open/{id}', [FormOtherController::class, 'open'])->name('forms.other.open');
    });

    //Menu Role
    Route::get('/auth/menu-tree/{id}', [MenuRoleController::class, 'index'])->name('auth.menurole.index');
    Route::post('/auth/menu-tree/submit', [MenuRoleController::class, 'saveMenu'])->name('auth.menurole.submit');
});

Route::get('/check-workers', function (Request $request) {
    return response()->json([
        'octane_client' => app()->bound(\Laravel\Octane\Contracts\Client::class),
        'worker_pid' => getmypid(),
    ]);
});
