<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Http\Request;
use App\Models\{Contact};

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// if(in_array($request->ip(), ['85.217.204.48'])) {
//     \Debugbar::enable();
// }
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


Auth::routes();

Route::prefix('admin')->group(function() {
  Route::get('/login', [App\Http\Controllers\Auth\AdminLoginController::class, 'showLoginForm'])->name('admin.login');
  Route::post('/login', [App\Http\Controllers\Auth\AdminLoginController::class, 'login'])->name('admin.login.submit');

  Route::middleware('auth:admin')->group(function(){
    // Admin Shares
    View::share('contacts', Contact::orderBy('id','desc')->get());

    Route::get('logout/', [App\Http\Controllers\Auth\AdminLoginController::class, 'logout'])->name('admin.logout');
    Route::get('/', [App\Http\Controllers\Backend\HomeController::class, 'index'])->name('admin.home');

    Route::post('load-filter', [App\Http\Controllers\Backend\ProductController::class, 'loadFilter'])->name('load_filter');
    Route::post('index-filter', [App\Http\Controllers\Backend\ProductController::class, 'indexFilter'])->name('index-filter');

    // Modules
    Route::resource('roles', App\Http\Controllers\Backend\RoleController::class);
    Route::resource('languages', App\Http\Controllers\Backend\LanguageController::class);
    Route::resource('brands', App\Http\Controllers\Backend\BrandController::class);
    Route::resource('categories', App\Http\Controllers\Backend\CategoryController::class);
    Route::resource('pages', App\Http\Controllers\Backend\PageController::class);
    Route::resource('blogs', App\Http\Controllers\Backend\BlogController::class);
    Route::resource('banners', App\Http\Controllers\Backend\BannerController::class);
    Route::resource('users', App\Http\Controllers\Backend\UserController::class);
    Route::resource('contacts', App\Http\Controllers\Backend\ContactController::class);
    Route::resource('products', App\Http\Controllers\Backend\ProductController::class);
    Route::resource('products.photos', App\Http\Controllers\Backend\ProductPhotoController::class)->names(['destroy' => 'products.photos.destroy'])->shallow();
    Route::resource('product_stickers', App\Http\Controllers\Backend\ProductStickerController::class);
    Route::resource('filter_groups', App\Http\Controllers\Backend\FilterGroupController::class);
    Route::resource('filter_attributes', App\Http\Controllers\Backend\FilterAttributeController::class);
    Route::resource('orders', App\Http\Controllers\Backend\OrderController::class)->only('index', 'show')
    ->names([
            'index' => 'orders.list',
            'show' => 'order.view',
            ]);;

    Route::get('categories-filter', [App\Http\Controllers\Backend\CategoryController::class, 'filter'])->name('categories.filter');

    Route::post('update-attributes-sorting', [App\Http\Controllers\Backend\FilterAttributeController::class, 'attributesSort'])->name('update_attributes_sorting');
    Route::post('change-order-status/{id}', [App\Http\Controllers\Backend\OrderController::class, 'changeOrderStatus'])->name('change_order_status');
    Route::post('update-order-info/{id}', [App\Http\Controllers\Backend\OrderController::class, 'updateOrderInfo'])->name('update_order_info');
    Route::post('update-order-note/{id}', [App\Http\Controllers\Backend\OrderController::class, 'updateOrderNote'])->name('update_order_note');
    Route::post('update-shipping-info/{id}', [App\Http\Controllers\Backend\OrderController::class, 'updateShippingInfo'])->name('update_shipping_info');
    Route::post('product-remove-order/{order_id}/{order_product_id}', [App\Http\Controllers\Backend\OrderController::class, 'productRemoveOrder'])->name('product_remove_order');
    Route::post('update-shipping-price/{order_id}', [App\Http\Controllers\Backend\OrderController::class, 'updateShippingPrice'])->name('update_shipping_price');
    Route::get('order-search-product/{order_id}', [App\Http\Controllers\Backend\OrderController::class, 'orderSearchProduct'])->name('order_search_product');
    Route::post('add-order-product/{order_id}', [App\Http\Controllers\Backend\OrderController::class, 'addOrderProduct'])->name('add_order_product');
    Route::post('order-categories', [App\Http\Controllers\Backend\CategoryController::class, 'order'])->name('categories.order');

    Route::post('add-order-note/{id}',
    [App\Http\Controllers\Backend\OrderController::class, 'addNote']
    )->name('add_order_note');



    Route::resource('/merge', App\Http\Controllers\Backend\Order\MergeController::class);

    // == ADMIN ORDERS
    Route::get('/{country}/get-cities', [App\Http\Controllers\Backend\AddressController::class, 'cities'])->name('admin.cities');
    Route::get('/{country}/{city_id}/get-addresses', [App\Http\Controllers\Backend\AddressController::class, 'addresses'])->name('admin.addresses');
    Route::post('/{country}/get-offices', [App\Http\Controllers\Backend\AddressController::class, 'offices'])->name('admin.offices');

    Route::get('/fix-rewrites', [App\Http\Controllers\Backend\ProductController::class, 'fixRewrite']);

    Route::post('/generate-shipment/{order_id}',
                  [App\Http\Controllers\Backend\OrderShippingController::class, 'generateShipment']
              )->name('generate_shipment');

    Route::get('/print-shipment/{order_id}',
                  [App\Http\Controllers\Backend\OrderShippingController::class, 'print']
              )->name('print_shipment');

    Route::post('/cancel-shipment/{order_id}',
                  [App\Http\Controllers\Backend\OrderShippingController::class, 'cancel']
              )->name('cancel_shipment');
    // == ADMIN ORDERS END

    Route::resource('permission', App\Http\Controllers\Backend\PermissionController::class);
    Route::resource('admins', App\Http\Controllers\Auth\AdminController::class);
    Route::resource('setting-groups', App\Http\Controllers\Backend\SettingGroupController::class);
    Route::resource('setting-fields', App\Http\Controllers\Backend\SettingFieldController::class);
    Route::resource('setting-values', App\Http\Controllers\Backend\SettingValueController::class);
    Route::resource('settings', App\Http\Controllers\Backend\SettingController::class);

    Route::post('ckeditor/upload', [App\Http\Controllers\Backend\CKEditorController::class, 'upload'])->name('ckeditor.image-upload');
  });
 });

 Route::get('/login-modal', function () {
   return view('layouts.frontend.partials.login_modal');
 })->name('login-modal');

Route::group(['prefix' => LaravelLocalization::setLocale()], function(){

  View::share('settings_translate', App\Models\Setting::where('language', LaravelLocalization::getCurrentLocale())->get(['value', 'key'])->keyBy('key'));

  View::share('settings', App\Models\Setting::get(['value', 'key'])->keyBy('key'));

  View::share('footer_blogs', App\Models\Blog::latest()
   ->withWhereHas('translation', fn($query) => $query->select('*')->where('language', LaravelLocalization::getCurrentLocale()))
   ->where('status', 1)
   ->select('*')
   ->take(5)
   ->get()
  );

  Route::get('/', [App\Http\Controllers\Frontend\HomeController::class, 'index'])->name('homepage');

  Route::get('/phpinfo', function () {
    phpinfo();
  })->name('phpinfo');


  View::share('eur_rate', env('EUR_RATE')); //EUR_RATE


  Route::prefix('profile')->middleware('auth:web')->group(function() {
    Route::resource('dashboard', App\Http\Controllers\Frontend\ProfileDashboardController::class);
    Route::resource('orders', App\Http\Controllers\Frontend\ProfileOrderController::class);
    Route::resource('addresses', App\Http\Controllers\Frontend\ProfileAddressController::class);
    Route::resource('favorite', App\Http\Controllers\Frontend\ProfileFavoriteController::class);
    Route::resource('close', App\Http\Controllers\Frontend\ProfileCloseController::class);

    Route::get('favorite-remove/{product_id}', [App\Http\Controllers\Frontend\ProfileFavoriteController::class, 'remove'])->name('favorite.remove');

    Route::get('/get-cities', [App\Http\Controllers\Frontend\ProfileAddressController::class, 'cities']);
    Route::get('/{city_id}/get-addresses', [App\Http\Controllers\Frontend\ProfileAddressController::class, 'addresses']);
    Route::post('/get-offices', [App\Http\Controllers\Frontend\ProfileAddressController::class, 'offices']);

  });

  Route::post('/quick-order-act', [App\Http\Controllers\Frontend\OrderController::class, 'quickOrder'])->name('quick_order');

  Route::get('/{rewrite}.html', [App\Http\Controllers\Frontend\ProductController::class, 'show'])->name('product.show');

  Route::post('/register', [App\Http\Controllers\Auth\RegisterController::class, 'register'])->name('register');

  Route::post('/login', [App\Http\Controllers\Auth\LoginController::class, 'login'])->name('login');
  Route::post('/login-page', [App\Http\Controllers\Auth\LoginController::class, 'loginPage'])->name('login.page');

  Route::post('/forgot-password', [App\Http\Controllers\Auth\ForgotPasswordController::class, 'resetPasswordEmail'])->middleware('guest')->name('password.email');

  Route::post('/forgot-password-page', [App\Http\Controllers\Auth\ForgotPasswordController::class, 'resetPasswordEmailPage'])->middleware('guest')->name('password.email.page');

  Route::get('/logout', [App\Http\Controllers\Auth\LoginController::class, 'logout'])->name('logout');

  Route::get('auth/facebook', [App\Http\Controllers\Frontend\FacebookController::class, 'redirectToFacebook'])->name('auth.facebook');
  Route::get('auth/facebook/callback', [App\Http\Controllers\Frontend\FacebookController::class, 'handleFacebookCallback']);

  Route::resource('cart', App\Http\Controllers\Frontend\CartController::class);

  Route::get('/checkout', [App\Http\Controllers\Frontend\CheckoutController::class, 'index'])->name('checkout');
  Route::get('/checkout/{id}', [App\Http\Controllers\Frontend\CheckoutController::class, 'destroy'])->name('checkout.destroy');

  Route::post('/order-create', [App\Http\Controllers\Frontend\OrderController::class, 'store'])->name('order.store');

  Route::get('borica_request/{order_id}', [App\Http\Controllers\Frontend\OrderController::class, 'boricaRequest'])->name('order.borica');
  Route::post('borica-response', [App\Http\Controllers\Frontend\OrderController::class, 'boricaResponse']);

  Route::get('/order-complete', [App\Http\Controllers\Frontend\OrderController::class, 'complete'])->name('order_complete');

  Route::resource('subscribers', App\Http\Controllers\Frontend\SubscriberController::class);

  if (Cookie::get('cartToken') != '') {
    $encrypter = app(\Illuminate\Contracts\Encryption\Encrypter::class);
    $cartToken = explode("|", $encrypter->decrypt(Cookie::get('cartToken'), false))[1];
    View::share('cart_products', App\Models\Cart::where('token', $cartToken)->with('product')->get());
  }

  Route::get('/sitemap.xml', [App\Http\Controllers\Frontend\SitemapController::class, 'index']);

  Route::get('/search', [App\Http\Controllers\Frontend\SearchController::class, 'index'])->name('search.index');

  Route::post('contact-send', [App\Http\Controllers\Frontend\ContactController::class, 'send'])->name('send');

  Route::get('/promotions', [App\Http\Controllers\Frontend\CategoryController::class, 'promoProducts'])->name('promotions');

  Route::get('/specials', [App\Http\Controllers\Frontend\CategoryController::class, 'specialProducts'])->name('specials');

  Route::post('product-rate/{product_id}', [App\Http\Controllers\Frontend\ProductController::class, 'rate'])->name('product_rate');

  Route::get('/blog/{slug}', [App\Http\Controllers\Frontend\PageController::class, 'blogDetail'])->name('blog.show');

  Route::get('info/{slug}', [App\Http\Controllers\Frontend\PageController::class, 'index'])->name('info.index');

  Route::get('{slug}/{subslug?}', [App\Http\Controllers\Frontend\CategoryController::class, 'index'])->name('category.index');


});



// Route::get('/product', function () {
//     return view('layouts.frontend.pages.product');
// })->name('product');

// Route::get('/login', function () {
//     return view('layouts.frontend.pages.login');
// })->name('login');

Route::get('/fpw', function () {
    return view('auth.passwords.email');
})->name('fpw');

Route::get('/contact', function () {
    return view('layouts.frontend.pages.contact');
})->name('contact');


