<?php

use Illuminate\Support\Facades\Route;
use Yas\AdminTheme\Http\Controllers\Catalog\AttributeController;
use Yas\AdminTheme\Http\Controllers\Catalog\AttributeFamilyController;
use Yas\AdminTheme\Http\Controllers\Catalog\CategoryController;
use Yas\AdminTheme\Http\Controllers\Catalog\Product\BundleController;
use Yas\AdminTheme\Http\Controllers\Catalog\Product\ConfigurableController;
use Yas\AdminTheme\Http\Controllers\Catalog\Product\DownloadableController;
use Yas\AdminTheme\Http\Controllers\Catalog\Product\GroupedController;
use Yas\AdminTheme\Http\Controllers\Catalog\ProductController;

/**
 * Catalog routes.
 */
Route::group(['middleware' => ['admin'], 'prefix' => config('app.admin_url')], function () {
    Route::prefix('catalog')->group(function () {
        /**
         * Attributes routes.
         */
        Route::controller(AttributeController::class)->prefix('attributes')->group(function () {
            Route::get('', 'index')->name('yas_admin.catalog.attributes.index');

            Route::get('{id}/options', 'getAttributeOptions')->name('yas_admin.catalog.attributes.options');

            Route::get('create', 'create')->name('yas_admin.catalog.attributes.create');

            Route::post('create', 'store')->name('yas_admin.catalog.attributes.store');

            Route::get('edit/{id}', 'edit')->name('yas_admin.catalog.attributes.edit');

            Route::put('edit/{id}', 'update')->name('yas_admin.catalog.attributes.update');

            Route::delete('edit/{id}', 'destroy')->name('yas_admin.catalog.attributes.delete');

            Route::post('mass-delete', 'massDestroy')->name('yas_admin.catalog.attributes.mass_delete');
        });

        /**
         * Attribute families routes.
         */
        Route::controller(AttributeFamilyController::class)->prefix('families')->group(function () {
            Route::get('', 'index')->name('yas_admin.catalog.families.index');

            Route::get('create', 'create')->name('yas_admin.catalog.families.create');

            Route::post('create', 'store')->name('yas_admin.catalog.families.store');

            Route::get('edit/{id}', 'edit')->name('yas_admin.catalog.families.edit');

            Route::put('edit/{id}', 'update')->name('yas_admin.catalog.families.update');

            Route::delete('edit/{id}', 'destroy')->name('yas_admin.catalog.families.delete');
        });

        /**
         * Categories routes.
         */
        Route::controller(CategoryController::class)->prefix('categories')->group(function () {
            Route::get('', 'index')->name('yas_admin.catalog.categories.index');

            Route::get('create', 'create')->name('yas_admin.catalog.categories.create');

            Route::post('create', 'store')->name('yas_admin.catalog.categories.store');

            Route::get('edit/{id}', 'edit')->name('yas_admin.catalog.categories.edit');

            Route::put('edit/{id}', 'update')->name('yas_admin.catalog.categories.update');

            Route::delete('edit/{id}', 'destroy')->name('yas_admin.catalog.categories.delete');

            Route::post('mass-delete', 'massDestroy')->name('yas_admin.catalog.categories.mass_delete');

            Route::post('mass-update', 'massUpdate')->name('yas_admin.catalog.categories.mass_update');

            Route::get('search', 'search')->name('yas_admin.catalog.categories.search');

            Route::get('tree', 'tree')->name('yas_admin.catalog.categories.tree');

            Route::get('get-company', 'getCompanyAssociatedWithCategory')->name('yas_admin.catalog.categories.getCompanyAssociatedWithCategory');
        });

        /**
         * Sync route.
         */
        Route::get('/sync', [ProductController::class, 'sync']);

        /**
         * Products routes.
         */
        Route::controller(ProductController::class)->prefix('products')->group(function () {

            Route::post('getUserPassword', 'getUserPassword')->name('yas_admin.catalog.products.getUserPassword');

            Route::get('', 'index')->name('yas_admin.catalog.products.index');

            Route::post('create', 'store')->name('yas_admin.catalog.products.store');

            Route::get('copy/{id}', 'copy')->name('yas_admin.catalog.products.copy');

            Route::get('edit/{id}', 'edit')->name('yas_admin.catalog.products.edit');

            Route::put('edit/{id}', 'update')->name('yas_admin.catalog.products.update');

            Route::delete('edit/{id}', 'destroy')->name('yas_admin.catalog.products.delete');

            Route::put('edit/{id}/inventories', 'updateInventories')->name('yas_admin.catalog.products.update_inventories');

            Route::post('upload-file/{id}', 'uploadLink')->name('yas_admin.catalog.products.upload_link');

            Route::post('upload-sample/{id}', 'uploadSample')->name('yas_admin.catalog.products.upload_sample');

            Route::post('mass-update', 'massUpdate')->name('yas_admin.catalog.products.mass_update');

            Route::post('mass-delete', 'massDestroy')->name('yas_admin.catalog.products.mass_delete');

            Route::controller(ConfigurableController::class)->group(function () {
                Route::get('{id}/configurable-options', 'options')->name('yas_admin.catalog.products.configurable.options');
            });

            Route::controller(BundleController::class)->group(function () {
                Route::get('{id}/bundle-options', 'options')->name('yas_admin.catalog.products.bundle.options');
            });

            Route::controller(GroupedController::class)->group(function () {
                Route::get('{id}/grouped-options', 'options')->name('yas_admin.catalog.products.grouped.options');
            });

            Route::controller(DownloadableController::class)->group(function () {
                Route::get('{id}/downloadable-options', 'options')->name('yas_admin.catalog.products.downloadable.options');
            });

            Route::get('search', 'search')->name('yas_admin.catalog.products.search');

            Route::get('{id}/{attribute_id}', 'download')->name('yas_admin.catalog.products.file.download');
        });
    });
});
