<?php

// header('Access-Control-Allow-Origin: *');
// header('Access-Control-Allow-Methods: GET, POST');
// header("Access-Control-Allow-Headers: *");

use App\Http\Controllers\AdminController\CarWashOwnerController;
use App\Http\Controllers\AdminPanel\AdminController;
use App\Http\Controllers\AdminPanel\BannerController;
use App\Http\Controllers\AdminPanel\CarOwnersCarController;
use App\Http\Controllers\AdminPanel\CarWashClientsController;
use App\Http\Controllers\AdminPanel\CarWashOwnerController as AdminPanelCarWashOwnerController;
use App\Http\Controllers\AdminPanel\SearchCarController;
use App\Http\Controllers\AdminPanel\SubUserController;
use App\Http\Controllers\AdminPanel\UnitController;
use App\Http\Controllers\AdminPanel\WashCategoryController;
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\OwnerPanel\OwnerController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\UserPanel\UserController;
use App\Http\Controllers\AdminPanel\CarWashReportController;
use App\Http\Controllers\AdminPanel\CwoUserController;
use App\Http\Controllers\OwnerPanel\OwnerWashCategoryController;
use App\Http\Controllers\OwnerPanel\OwnerCarWashReportController;
use App\Http\Controllers\OwnerPanel\OwnerSearchCarController;
use App\Http\Controllers\OwnerPanel\WashOwnerController;
use App\Http\Controllers\OwnerPanel\OwnerCwoUserController;
use App\Http\Controllers\OwnerPanel\OwnerBannerController;
use App\Http\Controllers\OwnerPanel\OwnerLoyaltyController;
use App\Http\Controllers\AdminPanel\PermissionController;
use App\Http\Controllers\AdminPanel\CleanerController;
use App\Http\Controllers\AdminPanel\AdminLoyaltyController;
use App\Http\Controllers\AdminPanel\ContactSupportController;
use App\Http\Controllers\AdminPanel\CmsController;
use App\Http\Controllers\OwnerPanel\OwnerCleanerController;
use App\Http\Controllers\OwnerPanel\OwnerPasscodeController;
use App\Http\Controllers\OwnerPanel\OwnerBodyTypeController;
use App\Http\Controllers\AdminPanel\BodyTypeController;
use App\Http\Controllers\FastPayControl;
use App\Http\Controllers\CwoRegisterController;
use App\Http\Controllers\WashPrintController;
use App\Http\Controllers\CronController;
use App\Http\Controllers\PageController;
use App\Http\Controllers\AdminPanel\CoBannerController;
use App\Http\Controllers\OwnerPanel\OwnerDailySummaryReportController;
use App\Http\Controllers\OwnerPanel\OwnerClientBirthdayController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Artisan;

/*
|--------------------------------------------------------------------------
| 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::get('/', [AuthenticatedSessionController::class, 'create'])->name('login');
Route::get('terms-conditions', [PageController::class, 'terms'])->name('page.terms');


Route::middleware(['auth', 'role'])->group(function () {
    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');
});

require __DIR__ . '/auth.php';

Route::get('dashboard', [UserController::class, 'index'])->name('dashboard');

Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
    Route::get('dashboard', [AdminController::class, 'index'])->name('dashboard');
    Route::controller(AdminPanelCarWashOwnerController::class)->prefix('cwo')->group(function () {
        Route::get('list', 'index')->name('cwo.list');
        Route::post('list', 'index')->name('cwo.fetch.list');
        Route::get('create', 'create')->name('cwo.create');
        Route::post('store', 'store')->name('cwo.store');
        Route::post('status_change_ajax', 'status_change_ajax')->name('cwo.status_change_ajax');
        Route::get('edit/{id}', 'edit')->name('cwo.edit');
        Route::post('update/{id}', 'update')->name('cwo.update');
        Route::post('delete', 'destroy')->name('cwo.delete');
        Route::post('delete_image', 'delete_image')->name('cwo.delete_image');
        Route::get('download-list', 'downloadList')->name('cwo.download.list');
        Route::post('renew-info', 'renewInfo')->name('cwo.renewinfo');
        Route::post('renew-info-post', 'renewInfoPost')->name('cwo.renewinfo.post');
    });

    Route::controller(CarWashClientsController::class)->prefix('cwc')->group(function () {
        Route::get('list', 'index')->name('cwc.list');
        Route::post('list', 'index')->name('cwc.fetch.list');
        Route::get('create', 'create')->name('cwc.create');
        Route::post('store', 'store')->name('cwc.store');
        Route::post('status_change_ajax', 'status_change_ajax')->name('cwc.status_change_ajax');
        Route::get('edit/{id}', 'edit')->name('cwc.edit');
        Route::post('update/{id}', 'update')->name('cwc.update');
        Route::post('delete', 'destroy')->name('cwc.delete');
        Route::post('delete_image', 'delete_image')->name('cwc.delete_image');
        // Route::get('download-list', 'downloadList')->name('cwc.download.list');
        Route::get('download', 'download')->name('cwc.download');
    });

    Route::controller(WashCategoryController::class)->prefix('wash-category')->name('wc.')->group(function () {
        Route::get('list', 'index')->name('list');
        // Route::post('list', 'index')->name('fetch.list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('download-list', 'downloadList')->name('download.list');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
    });

    Route::controller(CleanerController::class)->prefix('cleaner')->name('cl.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        // Route::get('download-list', 'downloadList')->name('download.list');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
        Route::post('status_change_ajax', 'status_change_ajax')->name('status_change_ajax');
    });

    Route::controller(SubUserController::class)->prefix('sub-user')->name('su.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::post('list', 'index')->name('fetch.list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('download-list', 'downloadList')->name('download.list');
    });

    Route::controller(SearchCarController::class)->prefix('car-search')->name('cs.')->group(function () {
        Route::get('list', 'index')->name('list');
        // Route::post('list', 'index')->name('fetch.list');
    });

    Route::controller(CarWashReportController::class)->prefix('car-wash-report')->name('cor.')->group(function () {
        Route::get('list', 'index')->name('list');
        // Route::post('list', 'index')->name('fetch.list');
        Route::get('download', 'download')->name('download');
        Route::get('duration', 'duration')->name('duration');
        Route::get('print/{id}', 'printWashDetail')->name('print');
        Route::get('delete/{id}', 'delete')->name('delete');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::post('multidelete', 'multiDelete')->name('multidelete');
    });

    Route::controller(UnitController::class)->prefix('unit')->group(function () {
        Route::get('list/{cwoid}', 'index')->name('unit.list');
        Route::get('create/{cwoid}', 'create')->name('unit.create');
        Route::post('store/{cwoid}', 'store')->name('unit.store');
        Route::get('edit/{cwoid}/{unitid}', 'edit')->name('unit.edit');
        Route::post('update/{cwoid}/{unitid}', 'update')->name('unit.update');
        Route::get('delete/{unitid}', 'delete')->name('unit.delete');

        Route::get('user/list/{unitid}', 'listUser')->name('unit.user.list');
        Route::get('user/create/{unitid}', 'createUser')->name('unit.user.create');
        Route::post('user/store/{unitid}', 'storeUser')->name('unit.user.store');
        Route::get('user/edit/{unitid}/{userid}', 'editUser')->name('unit.user.edit');
        Route::post('user/update/{unitid}/{userid}', 'updateUser')->name('unit.user.update');
        Route::get('user/delete/{userid}', 'deleteUser')->name('unit.user.delete');
    });
    Route::controller(BannerController::class)->prefix('banner')->group(function () {
        Route::get('list/{cwoid}', 'index')->name('banner.list');
        Route::get('create/{cwoid}', 'create')->name('banner.create');
        Route::post('store/{cwoid}', 'store')->name('banner.store');
        Route::get('edit/{cwoid}/{bannerid}', 'edit')->name('banner.edit');
        Route::post('update/{cwoid}/{bannerid}', 'update')->name('banner.update');
        // Route::get('delete/{bannerid}', 'delete')->name('banner.delete');
    });

    Route::controller(CarOwnersCarController::class)->prefix('coc')->group(function () {
        Route::get('list/{co_id}', 'index')->name('coc.list');
        Route::post('list/{co_id}', 'index')->name('coc.fetch.list');
        Route::get('create/{co_id}', 'create')->name('coc.create');
        Route::post('store/{co_id}', 'store')->name('coc.store');
        Route::post('status_change_ajax/{co_id}', 'status_change_ajax')->name('coc.status_change_ajax');
        Route::get('edit/{co_id}/{id}', 'edit')->name('coc.edit');
        Route::post('update/{co_id}/{id}', 'update')->name('coc.update');
        Route::post('delete/{co_id}', 'destroy')->name('coc.delete');
        Route::post('delete_image/{co_id}', 'delete_image')->name('coc.delete_image');
        Route::get('download-list/{co_id}', 'downloadList')->name('coc.download.list');
    });
    Route::controller(CwoUserController::class)->prefix('cwo-user')->name('cu.')->group(function () {
        Route::get('list/{cwoid}', 'listUser')->name('user.list');
        Route::get('create/{cwoid}', 'createUser')->name('user.create');
        Route::post('store/{cwoid}', 'storeUser')->name('user.store');
        Route::get('edit/{cwoid}/{userid}', 'editUser')->name('user.edit');
        Route::post('update/{cwoid}/{userid}', 'updateUser')->name('user.update');
        Route::get('delete/{userid}', 'deleteUser')->name('user.delete');
    });
    Route::controller(PermissionController::class)->prefix('permission')->name('pr.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
    });
    Route::controller(AdminLoyaltyController::class)->prefix('loyalty')->name('lo.')->group(function () {
        Route::get('list', 'index')->name('list');
    });
    Route::controller(ContactSupportController::class)->prefix('contact-support')->name('csu.')->group(function () {
        Route::get('list', 'index')->name('list');
    });
    Route::controller(CmsController::class)->prefix('cms')->name('cms.')->group(function () {
        Route::get('terms-and-conditions', 'termsAndConditions')->name('terms.and.conditions');
        Route::post('terms-and-conditions-save', 'addTermsdPost')->name('terms.and.conditions.save');

        Route::get('terms-and-conditions-co', 'termsAndConditionsForCo')->name('terms.and.conditionsforco');
        Route::post('terms-and-conditions-save-co', 'addTermsdPostForCo')->name('terms.and.conditions.saveco');
    });
    Route::controller(CoBannerController::class)->prefix('co-banner')->group(function () {
        Route::get('list', 'index')->name('cobanner.list');
        Route::get('create', 'create')->name('cobanner.create');
        Route::post('store', 'store')->name('cobanner.store');
        Route::get('edit/{id}', 'edit')->name('cobanner.edit');
        Route::post('update/{id}', 'update')->name('cobanner.update');
        Route::get('delete/{id}', 'delete')->name('cobanner.delete');
    });
    Route::controller(BodyTypeController::class)->prefix('body-type')->name('bt.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
        Route::post('status_change_ajax', 'status_change_ajax')->name('status_change_ajax');
    });
});

// Route::middleware(['auth', 'verified', 'role:owner'])->group(function () {
//     Route::get('owner/dashboard', [OwnerController::class, 'index'])->name('owner.dashboard');
// });
Route::middleware(['auth', 'role:car_wash_owner'])->prefix('owner')->name('owner.')->group(function () {
    Route::get('dashboard', [OwnerController::class, 'index'])->name('dashboard');
    Route::get('profile', [OwnerController::class, 'profile'])->name('profile');
    Route::post('updateprofile', [OwnerController::class, 'updateprofile'])->name('updateprofile');

    Route::controller(OwnerWashCategoryController::class)->prefix('wash-category')->name('wc.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('download-list', 'downloadList')->name('download.list');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
    });
    Route::controller(OwnerCleanerController::class)->prefix('cleaner')->name('cl.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        // Route::get('download-list', 'downloadList')->name('download.list');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
    });
    Route::controller(OwnerPasscodeController::class)->prefix('passcode')->name('ps.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::post('store', 'store')->name('store');
    });
    Route::controller(OwnerCarWashReportController::class)->prefix('car-wash-report')->name('cor.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('download', 'download')->name('download');
        Route::get('print/{id}', 'printWashDetail')->name('print');
        Route::get('delete/{id}', 'delete')->name('delete');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::post('multidelete', 'multiDelete')->name('multidelete');
    });
    Route::controller(OwnerSearchCarController::class)->prefix('car-search')->name('cs.')->group(function () {
        Route::get('list', 'index')->name('list');
    });
    Route::controller(WashOwnerController::class)->prefix('cwo')->name('cwo.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
    });
    Route::controller(OwnerCwoUserController::class)->prefix('cwo-user')->name('cu.user.')->group(function () {
        Route::get('list/{cwoid}', 'listUser')->name('list');
        Route::get('create/{cwoid}', 'createUser')->name('create');
        Route::post('store/{cwoid}', 'storeUser')->name('store');
        Route::get('edit/{cwoid}/{userid}', 'editUser')->name('edit');
        Route::post('update/{cwoid}/{userid}', 'updateUser')->name('update');
        Route::get('delete/{userid}', 'deleteUser')->name('delete');
        Route::get('delete-account', 'deleteAccount')->name('deleteaccount');
    });
    Route::controller(OwnerBannerController::class)->prefix('banner')->name('banner.')->group(function () {
        Route::get('list/{cwoid}', 'index')->name('list');
        Route::get('create/{cwoid}', 'create')->name('create');
        Route::post('store/{cwoid}', 'store')->name('store');
        Route::get('edit/{cwoid}/{bannerid}', 'edit')->name('edit');
        Route::post('update/{cwoid}/{bannerid}', 'update')->name('update');
    });
    Route::controller(OwnerLoyaltyController::class)->prefix('loyalty')->name('loyalty.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
    });
    Route::controller(OwnerBodyTypeController::class)->prefix('body-type')->name('bt.')->group(function () {
        Route::get('list', 'index')->name('list');
        Route::get('create', 'create')->name('create');
        Route::post('store', 'store')->name('store');
        Route::get('edit/{id}', 'edit')->name('edit');
        Route::post('update/{id}', 'update')->name('update');
        Route::get('delete/{id}', 'delete')->name('delete');
        Route::post('status_change_ajax', 'status_change_ajax')->name('status_change_ajax');
    });
    Route::controller(OwnerDailySummaryReportController::class)->prefix('daily-summary-report')->name('dsr.')->group(function () {
        Route::get('list', 'index')->name('list');
    });
    Route::controller(OwnerClientBirthdayController::class)->prefix('client-birthday')->name('clb.')->group(function () {
        Route::get('list', 'index')->name('list');
    });
});

Route::middleware(['auth', 'role:car_owner'])->prefix('user')->name('user.')->group(function () {
    Route::get('dashboard', [UserController::class, 'index'])->name('dashboard');
});

Route::get('migraterun', function () {
    Artisan::call('migrate');
});
Route::get('linkstorage', function () {
    Artisan::call('storage:link');
});


Route::controller(FastPayControl::class)->prefix('payment')->name('payment.')->group(function () {
    Route::any('', 'payment')->name('payment');
    Route::any('fastpay', 'fastPay')->name('fastPay');
    Route::any('cancel', 'cancel')->name('cancel');
    Route::any('return', 'return')->name('return');
    Route::any('notify', 'notify')->name('notify');
    Route::any('renew', 'renew')->name('renew');
});

Route::controller(CwoRegisterController::class)->group(function () {
    Route::get('cwo/register', 'cwoRegister')->name('cwo.register');
    Route::post('cwo/register/create', 'cwoRegisterCreate')->name('cwo.register.create');
    Route::get('cwo/register/success/{id}', 'cwoRegisterSuccess')->name('cwo.register.success');
    Route::get('cwo/register/business/{id}', 'cwoRegisterBusiness')->name('cwo.register.business');
    Route::post('cwo/register/business/create/{id}', 'cwoRegisterBusinessSuccess')->name('cwo.register.business.success');
});

Route::controller(CwoRegisterController::class)->group(function () {
    Route::get('landing', 'landing')->name('site.landing');
    Route::get('thank-you', 'thankYou')->name('site.thankyou');
});

Route::controller(WashPrintController::class)->group(function () {
    Route::get('wash-details/print', 'washDetails')->name('wash.details');
});

Route::controller(CronController::class)->prefix('cron')->name('cron.')->group(function () {
    Route::get('unsubscribe', 'unsubscribe')->name('unsubscribe');
    Route::get('unsubscribe-free-trial', 'unsubscribeFreeTrial')->name('unsubscribe.freetrial');
    Route::get('unsubscribe-custom', 'unsubscribeCustom')->name('unsubscribe.custom');
});

