<?php

use Illuminate\Support\Facades\Route;
use Yas\Member\Http\Controllers\Member\Account\AddressController;
use Yas\Member\Http\Controllers\Member\Account\OrderController;
use Yas\Member\Http\Controllers\Member\MemberController;
use Yas\Member\Http\Controllers\Member\ForgotPasswordController;
use Yas\Member\Http\Controllers\Member\RegistrationController;
use Yas\Member\Http\Controllers\Member\ResetPasswordController;
use Yas\Member\Http\Controllers\Member\SessionController;
use Yas\Member\Http\Controllers\DataGridController;

Route::group(['middleware' => ['locale', 'theme', 'currency']], function () {

    Route::prefix('member')->group(function () {
        /**
         * Forgot password routes.
         */
        Route::controller(ForgotPasswordController::class)->prefix('forgot-password')->group(function () {
            Route::get('', 'create')->name('yas_member.member.forgot_password.create');

            Route::post('', 'store')->name('yas_member.member.forgot_password.store');
        });

        /**
         * Reset password routes.
         */
        Route::controller(ResetPasswordController::class)->prefix('reset-password')->group(function () {
            Route::get('{token}', 'create')->name('yas_member.member.reset_password.create');

            Route::post('', 'store')->name('yas_member.member.reset_password.store');
        });

        /**
         * Login routes.
         */
        Route::controller(SessionController::class)->prefix('login')->group(function () {
            
            Route::get('', 'index')->name('yas_member.member.session.index');

            Route::post('', 'store')->name('yas_member.member.session.create');
        });
        
        /**
         * Registration routes.
         */
        Route::controller(RegistrationController::class)->group(function () {
            Route::prefix('register')->group(function () {
                Route::get('', 'index')->name('yas_member.member.register.index');

                Route::post('', 'store')->name('yas_member.member.register.store');
            });

            /**
             * Customer verification routes.
             */
            Route::get('verify-account/{token}', 'verifyAccount')->name('yas_member.member.verify');

            Route::get('resend/verification/{email}', 'resendVerificationEmail')->name('yas_member.member.resend.verification_email');
        });

        /**
         * Customer authenticated routes. All the below routes only be accessible
         * if member is authenticated.
         */
        Route::group(['middleware' => ['member']], function () {
            /**
             * Datagrid routes.
             */
            Route::get('datagrid/look-up', [DataGridController::class, 'lookUp'])->name('yas_member.member.datagrid.look_up');

            /**
             * Logout.
             */
            Route::delete('logout', [SessionController::class, 'destroy'])->defaults('_config', [
                'redirect' => 'yas_member.member.session.index',
            ])->name('yas_member.member.session.destroy');

            /**
             * Customer account. All the below routes are related to
             * member account details.
             */
            Route::prefix('account')->group(function () {
                Route::get('', [MemberController::class, 'account'])->name('yas_member.member.account.index');

                /**
                 * Profile.
                 */
                Route::controller(MemberController::class)->prefix('profile')->group(function () {
                    Route::get('', 'index')->name('yas_member.member.account.profile.index');

                    Route::get('edit', 'edit')->name('yas_member.member.account.profile.edit');

                    Route::post('edit', 'update')->name('yas_member.member.account.profile.update');

                    Route::post('destroy', 'destroy')->name('yas_member.member.account.profile.destroy');

                    Route::get('reviews', 'reviews')->name('yas_member.member.account.reviews.index');
                });

                /**
                 * Addresses.
                 */
                 Route::controller(AddressController::class)->prefix('addresses')->group(function () {
                    Route::get('', 'index')->name('yas_member.member.account.addresses.index');

                    Route::get('create', 'create')->name('yas_member.member.account.addresses.create');

                    Route::post('create', 'store')->name('yas_member.member.account.addresses.store');

                    Route::get('edit/{id}', 'edit')->name('yas_member.member.account.addresses.edit');

                    Route::put('edit/{id}', 'update')->name('yas_member.member.account.addresses.update');

                    Route::patch('edit/{id}', 'makeDefault')->name('yas_member.member.account.addresses.update.default');

                    Route::delete('delete/{id}', 'destroy')->name('yas_member.member.account.addresses.delete');
                }); 

                /**
                 * Orders.
                 */
                Route::controller(OrderController::class)->prefix('orders')->group(function () {
                    Route::get('', 'index')->name('yas_member.member.account.orders.index');

                    Route::get('view/{id}', 'view')->name('yas_member.member.account.orders.view');

                    Route::get('reorder/{id}', 'reorder')->name('yas_member.member.account.orders.reorder');

                    Route::post('cancel/{id}', 'cancel')->name('yas_member.member.account.orders.cancel');

                    Route::get('print/Invoice/{id}', 'printInvoice')->name('yas_member.member.account.orders.print-invoice');
                });
            });
        });
    });
});
