<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Artisan;
use App\Http\Controllers\Frontend\BlogController;
use App\Http\Controllers\Frontend\CartController;
use App\Http\Controllers\Frontend\ShopController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Frontend\HomePageController;
use App\Http\Controllers\Frontend\SearchController;

Route::group(['middleware' => ['maintenance.mode', 'translation']], function () {

    Route::controller(HomePageController::class)->group(function () {
        Route::get('/', 'index')->name('home');
        Route::get('change-theme/{name}', 'changeTheme')->name('change-theme');
        Route::view('contact','frontend.pages.contact')->name('contact');
        Route::get('team', 'team')->name('team');
        Route::get('team/{slug}', 'singleTeam')->name('single.team');
        Route::post('contact/member/{slug}', 'contactTeamMember')->name('contact.team.member')->middleware('throttle:4,60');
        Route::get('about', 'about')->name('about');
        Route::get('faq', 'faq')->name('faq');
        Route::get('atm', 'pricing')->name('pricing');
        Route::get('online-banking', 'onlineBanking')->name('online-banking');
        Route::get('loan-calculator', 'LoanCalculator')->name('loan-calculator');
        Route::get('deposit-calculator', 'DepositCalculator')->name('deposit-calculator');
        Route::get('fatca-crs', 'fatca')->name('fatca-crs');
        //Route::get('term-deposit', 'termDeposit')->name('term-deposit');
        //Route::get('wps-account', 'wpsAccount')->name('wps-account');
        //Route::get('personal-loan', 'personalLoan')->name('personal-loan');
        //Route::get('overdraft', 'overdraft')->name('overdraft');
        Route::get('key-facts-statement', 'keyFactsStatement')->name('key-facts-statement');
        Route::get('schedule-of-charges', 'scheduleCharges')->name('schedule-of-charges');
        Route::get('complaint', 'complaint')->name('complaint');
        
        Route::get('portfolios', 'portfolios')->name('portfolios');
        Route::get('eservices', 'eservices')->name('eservices');
        Route::get('accounts/{slug}', 'singlePortfolio')->name('single.portfolio');
        Route::get('services', 'services')->name('services');
        Route::get('services/{slug}', 'singleService')->name('single.service');
        
        Route::get('fraud', 'fraud')->name('fraud');
        Route::get('privacy-policy', 'privacyPolicy')->name('privacy-policy');
        Route::get('terms-condition', 'termsCondition')->name('terms-condition');
        Route::get('application-forms', 'applicationForms')->name('application-forms');
        Route::get('career', 'career')->name('career');
        Route::get('awarness', 'awarness')->name('awarness');
        Route::get('deposit-rates', 'depositRates')->name('deposit-rates');
        Route::get('lending-rates', 'lendingRates')->name('lending-rates');
        Route::get('debt-management ', 'debtManagement')->name('debt-management');
        Route::get('page/{slug}', 'customPage')->name('custom-page');
    });
    Route::controller(BlogController::class)->group(function () {
        Route::get('blogs', 'index')->name('blogs');
        Route::get('blogs/{slug}', 'show')->name('single.blog');
        Route::post('blogs/{slug}', 'blogCommentStore')->name('blog.comment.store')->middleware(['auth:web', 'verified']);
    });

    Route::middleware('shop')->group(function () {
        Route::view('products', 'frontend.pages.shop.index')->name('shop');

        Route::controller(ShopController::class)->group(function(){
            Route::get('fetch-products', 'fetchProducts')->name('fetch.products');
            Route::get('products/{slug}', 'singleProduct')->name('single.product');
        });
        Route::controller(CartController::class)->group(function(){
            Route::view('cart', 'frontend.pages.shop.cart')->name('cart');
            Route::get('add-to-cart/{slug}', 'addToCart')->name('add.cart');
            Route::post('update-cart/{rowId}', 'updateCart')->name('cart.update');
            Route::get('remove-from-cart/{rowId}', 'removeFromCart')->name('remove-from.cart');
            Route::post('apply-coupon', 'apply_coupon')->name('apply-coupon');
        });
    });
});

Route::get('search', [SearchController::class, 'search'])->name('search');
Route::get('set-language', [DashboardController::class, 'setLanguage'])->name('set-language');
Route::get('set-currency', [DashboardController::class, 'setCurrency'])->name('set-currency');

/*Route::get('migration-own', function () {
    try {
        Artisan::call('migrate', ['--force' => true]); // --force ensures it runs outside CLI
        $output = Artisan::output();

        // Optional: Check if output contains specific text (basic success check)
        if (str_contains($output, 'Migrated')) {
            return response()->json([
                'message' => 'Migration completed successfully.',
                'output' => $output
            ]);
        }

        return response()->json([
            'message' => 'Migration command executed.',
            'output' => $output
        ]);
    } catch (\Exception $e) {
        Log::error('Migration failed: ' . $e->getMessage());
        return response()->json([
            'error' => 'Migration failed.',
            'message' => $e->getMessage()
        ], 500);
    }
});*/

Route::get('/clear-cache/{type?}', function ($type = 'all') {
    
    $output = '';
    
    try {
        switch ($type) {
            case 'config':
                Artisan::call('config:clear');
                $output .= "Configuration cache cleared!\n";
                break;
                
            case 'route':
                Artisan::call('route:clear');
                $output .= "Route cache cleared!\n";
                break;
                
            case 'view':
                Artisan::call('view:clear');
                $output .= "View cache cleared!\n";
                break;
                
            case 'application':
                Artisan::call('cache:clear');
                $output .= "Application cache cleared!\n";
                break;
                
            case 'all':
            default:
                Artisan::call('cache:clear');
                Artisan::call('config:clear');
                Artisan::call('route:clear');
                Artisan::call('view:clear');
                Artisan::call('optimize:clear');
                $output .= "All caches cleared!\n";
                break;
        }
        
        return '<pre>' . $output . '</pre>';
    } catch (\Exception $e) {
        return '<pre>Error: ' . $e->getMessage() . '</pre>';
    }
});


//maintenance mode route
Route::get('maintenance-mode', function () {
    $setting = cache()->get('setting', null);
    return $setting?->maintenance_mode ? view('global.maintenance') : redirect()->route('home');
})->name('maintenance.mode');

require __DIR__ . '/auth.php';
require __DIR__ . '/user.php';
require __DIR__ . '/admin.php';

Route::fallback(function () {
    abort(404);
});