<?php

/*use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use \App\Laravue\Faker;
use \App\Laravue\JsonResponse;*/
use App\Laravue\Acl;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

// Authentication routes
Route::post( 'auth/login', 							'AuthController@login');
Route::post( 'auth/2fa/verify-login', 				'Auth\TwoFactorAuthController@verifyLogin');

Route::group(['middleware' => 'auth:api'], function () {
    // Auth routes
    Route::get(         'user',                     'AuthController@getUser');
    Route::get(         'auth/user',                'AuthController@user');
    Route::post(        'auth/logout',              'AuthController@logout');
    
    // 2FA routes
    Route::group(['prefix' => 'auth/2fa'], function() {
        Route::get(	'status', 						'Auth\TwoFactorAuthController@status');
        Route::post('enable', 						'Auth\TwoFactorAuthController@enable');
        Route::post('verify', 						'Auth\TwoFactorAuthController@verify');
        Route::post('disable', 						'Auth\TwoFactorAuthController@disable');
        Route::post('recovery-codes', 				'Auth\TwoFactorAuthController@generateRecoveryCodes');
    });
    
    // User sessions
    Route::group(['prefix' => 'user'], function() {
        Route::get('sessions', 'Auth\UserSessionController@index');
        Route::delete('sessions', 'Auth\UserSessionController@logoutOtherSessions');
    });

    // User routes - specific routes BEFORE wildcard routes
    Route::get(         'users',                    'UserController@index')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_ONLY_MANAGE);
    Route::get(         'users/assigned/list',      'UserController@assigned')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_ONLY_MANAGE);
    Route::get(         'users/estimate/saved',     'UserController@estimateSaved');
    Route::post(        'users',                    'UserController@store');
    Route::post(        'users/review',             'UserController@storeReview');
    Route::post(        'users/review/reply',       'UserController@storeReplyReview');
    Route::post(        'users/review/hidden',      'UserController@storeHiddenReview');
    Route::delete(      'users/estimate/{id}',      'UserController@estimateDestroy');

    // Wildcard routes AFTER specific routes to avoid conflicts
    Route::get(         'users/{user}',             'UserController@show')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_EDIT_MANAGE);
    Route::put(         'users/profile/{user}',     'UserController@updateProfile');
    Route::put(         'users/{user}',             'UserController@update')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_EDIT_MANAGE);
    Route::delete(      'users/{user}',             'UserController@destroy')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_DELETE_MANAGE);
    Route::get(         'users/{user}/permissions', 'UserController@permissions')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_EDIT_MANAGE);
    Route::put(         'users/{user}/permissions', 'UserController@updatePermissions')->middleware('permission:' . Acl::PERMISSION_USER_MANAGE . '|' . Acl::PERMISSION_USER_EDIT_MANAGE);

    Route::post(        'product/save/{id}',        [ 'as' => 'product.front.estimate.save', 'uses' => 'ProductController@estimateSave' ]);

    //Address
    Route::get(         'address',                     [ 'as' => 'address.front.list',                  'uses' => 'AddressController@index' ]);
    Route::get(         'address/{id}',                [ 'as' => 'address.front.show',                  'uses' => 'AddressController@show' ]);
    Route::post(        'address',                     [ 'as' => 'address.front.store',                 'uses' => 'AddressController@store' ]);
    Route::put(         'address/{id}',                [ 'as' => 'address.front.update',                'uses' => 'AddressController@update' ]);
    Route::delete(      'address/{id}',                [ 'as' => 'address.front.destroy',               'uses' => 'AddressController@destroy' ]);

    //Order
    Route::get(         'order',                     [ 'as' => 'order.front.list',                  'uses' => 'OrderController@index' ]);
    Route::get(         'order/{id}',                [ 'as' => 'order.front.show',                  'uses' => 'OrderController@show' ]);
    Route::post(        'order',                     [ 'as' => 'order.front.store',                 'uses' => 'OrderController@store' ]);
    Route::put(         'order/{id}',                [ 'as' => 'order.front.update',                'uses' => 'OrderController@update' ]);
    Route::delete(      'order/{id}',                [ 'as' => 'order.front.destroy',               'uses' => 'OrderController@destroy' ]);

    //Review
    Route::get(         'review',                    [ 'as' => 'review.front.list',                  'uses' => 'ReviewController@index' ]);

    //Wishlist
    Route::get(         'wishlist',                  [ 'as' => 'wishlist.front.list',                'uses' => 'WishlistController@index' ]);
    Route::post(        'wishlist',                  [ 'as' => 'wishlist.front.store',               'uses' => 'WishlistController@store' ]);
    Route::post(        'wishlist/check/{id}',       [ 'as' => 'wishlist.front.check',               'uses' => 'WishlistController@check' ]);
    Route::delete(      'wishlist/{id}',             [ 'as' => 'wishlist.front.destroy',             'uses' => 'WishlistController@destroy' ]);
    Route::delete(      'wishlist/product/{id}',     [ 'as' => 'wishlist.front.product.destroy',     'uses' => 'WishlistController@destroyProductFromWishlist' ]);

    //Roles
    Route::apiResource( 'roles',                    'RoleController')->middleware('permission:' . Acl::PERMISSION_PERMISSION_MANAGE);
    Route::get(         'roles/list/only',          'RoleController@roleList')->middleware('permission:' . Acl::PERMISSION_PERMISSION_MANAGE);
    Route::get(         'roles/permission/all',     'RoleController@permissionsAll')->middleware('permission:' . Acl::PERMISSION_PERMISSION_MANAGE);
    Route::get(         'roles/{role}/permissions', 'RoleController@permissions')->middleware('permission:' . Acl::PERMISSION_PERMISSION_MANAGE);
    Route::apiResource( 'permissions',              'PermissionController')->middleware('permission:' . Acl::PERMISSION_PERMISSION_MANAGE);

    Route::group(['prefix' => 'admin'], function() {
        Route::get(         'dashboard/statistic',          [ 'as' => 'dashboard.statistic',            'uses' => 'Admin\DashboardController@statistic' ]);

        Route::get(         'menu',                     [ 'as' => 'menu.index',                 'uses' => 'Admin\MenuController@index' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_ONLY_MANAGE);
        Route::get(         'menu/all',                 [ 'as' => 'menu.all',                   'uses' => 'Admin\MenuController@all' ]);
        Route::get(         'menu/all/nested',          [ 'as' => 'menu.all.nested',            'uses' => 'Admin\MenuController@allNested' ]);
        Route::get(         'menu/{id}',                [ 'as' => 'menu.show',                  'uses' => 'Admin\MenuController@show' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_EDIT_MANAGE);
        Route::post(        'menu',                     [ 'as' => 'menu.store',                 'uses' => 'Admin\MenuController@store' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_CREATE_MANAGE);
        Route::post(        'menu/position',            [ 'as' => 'menu.position',              'uses' => 'Admin\MenuController@position' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_EDIT_MANAGE);
        Route::put(         'menu/{id}',                [ 'as' => 'menu.update',                'uses' => 'Admin\MenuController@update' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_EDIT_MANAGE);
        Route::delete(      'menu/{id}',                [ 'as' => 'menu.destroy',               'uses' => 'Admin\MenuController@destroy' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_DELETE_MANAGE);
        Route::delete(      'menu/multiple/destroy',    [ 'as' => 'menu.multiple.destroy',      'uses' => 'Admin\MenuController@destroyMultiple' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_DELETE_MANAGE);
        Route::post(        'menu/multiple/activate',   [ 'as' => 'menu.multiple.activate',     'uses' => 'Admin\MenuController@activateMultiple' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_EDIT_MANAGE);
        Route::post(        'menu/multiple/deactivate', [ 'as' => 'menu.multiple.deactivate',   'uses' => 'Admin\MenuController@deactivateMultiple' ])->middleware('permission:' . Acl::PERMISSION_MENU_MANAGE . '|' . Acl::PERMISSION_MENU_EDIT_MANAGE);
		
		// 1. Department Routes
		Route::get(     'department',                   ['as' => 'department.list',              'uses' => 'Admin\DepartmentController@index'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_ONLY_MANAGE);
		Route::get(     'department/all',               ['as' => 'department.all',               'uses' => 'Admin\DepartmentController@all']);
		Route::get(     'department/all/nested',        ['as' => 'department.all.nested',        'uses' => 'Admin\DepartmentController@allNested']);
		Route::get(     'department/available',         ['as' => 'department.available',         'uses' => 'Admin\DepartmentController@available'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_EDIT_MANAGE);
		Route::get(     'department/{id}',              ['as' => 'department.show',              'uses' => 'Admin\DepartmentController@show'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_EDIT_MANAGE);
		Route::post(    'department',                   ['as' => 'department.store',             'uses' => 'Admin\DepartmentController@store'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_CREATE_MANAGE);
		Route::put(     'department/{id}',              ['as' => 'department.update',            'uses' => 'Admin\DepartmentController@update'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_EDIT_MANAGE);
		Route::delete(  'department/{id}',              ['as' => 'department.destroy',           'uses' => 'Admin\DepartmentController@destroy'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_DELETE_MANAGE);
		Route::delete(  'department/multiple/destroy',   ['as' => 'department.multiple.destroy',  'uses' => 'Admin\DepartmentController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_DELETE_MANAGE);
		Route::post(    'department/multiple/activate',  ['as' => 'department.multiple.activate', 'uses' => 'Admin\DepartmentController@activateMultiple'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_EDIT_MANAGE);
		Route::post(    'department/multiple/deactivate',['as' => 'department.multiple.deactivate','uses' => 'Admin\DepartmentController@deactivateMultiple'])->middleware('permission:' . Acl::PERMISSION_DEPARTMENT_MANAGE . '|' . Acl::PERMISSION_DEPARTMENT_EDIT_MANAGE);

		// 2. Position Routes
		Route::get(     'position',                     ['as' => 'position.list',               'uses' => 'Admin\PositionController@index'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_ONLY_MANAGE);
		Route::get(     'position/all',                 ['as' => 'position.all',                'uses' => 'Admin\PositionController@all']);
		Route::get(     'position/available',         	['as' => 'position.available',          'uses' => 'Admin\PositionController@available']);
		Route::get(     'position/{id}',                ['as' => 'position.show',               'uses' => 'Admin\PositionController@show'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_EDIT_MANAGE);
		Route::post(    'position',                     ['as' => 'position.store',              'uses' => 'Admin\PositionController@store'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_CREATE_MANAGE);
		Route::put(     'position/{id}',                ['as' => 'position.update',             'uses' => 'Admin\PositionController@update'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_EDIT_MANAGE);
		Route::delete(  'position/{id}',                ['as' => 'position.destroy',            'uses' => 'Admin\PositionController@destroy'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_DELETE_MANAGE);
		Route::delete(  'position/multiple/destroy',     ['as' => 'position.multiple.destroy',   'uses' => 'Admin\PositionController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_DELETE_MANAGE);
		Route::post(    'position/multiple/activate',    ['as' => 'position.multiple.activate',  'uses' => 'Admin\PositionController@activateMultiple'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_EDIT_MANAGE);
		Route::post(    'position/multiple/deactivate',  ['as' => 'position.multiple.deactivate','uses' => 'Admin\PositionController@deactivateMultiple'])->middleware('permission:' . Acl::PERMISSION_POSITION_MANAGE . '|' . Acl::PERMISSION_POSITION_EDIT_MANAGE);

		// 4. Leave Type Routes
		Route::get(     'leave-type',                          ['as' => 'leave-type.list',                    'uses' => 'Admin\LeaveTypeController@index'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_ONLY_MANAGE);
		Route::get(     'leave-type/all',                      ['as' => 'leave-type.all',                     'uses' => 'Admin\LeaveTypeController@all']);
		Route::get(     'leave-type/available',                ['as' => 'leave-type.available',               'uses' => 'Admin\LeaveTypeController@available']);
		Route::get(     'leave-type/{id}',                     ['as' => 'leave-type.show',                    'uses' => 'Admin\LeaveTypeController@show'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_EDIT_MANAGE);
		Route::post(    'leave-type',                          ['as' => 'leave-type.store',                   'uses' => 'Admin\LeaveTypeController@store'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_CREATE_MANAGE);
		Route::put(     'leave-type/{id}',                     ['as' => 'leave-type.update',                  'uses' => 'Admin\LeaveTypeController@update'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_EDIT_MANAGE);
		Route::delete(  'leave-type/{id}',                     ['as' => 'leave-type.destroy',                 'uses' => 'Admin\LeaveTypeController@destroy'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_DELETE_MANAGE);
		Route::delete(  'leave-type/multiple/destroy',         ['as' => 'leave-type.multiple.destroy',        'uses' => 'Admin\LeaveTypeController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_DELETE_MANAGE);
		Route::post(    'leave-type/multiple/activate',        ['as' => 'leave-type.multiple.activate',       'uses' => 'Admin\LeaveTypeController@activateMultiple'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_EDIT_MANAGE);
		Route::post(    'leave-type/multiple/deactivate',      ['as' => 'leave-type.multiple.deactivate',     'uses' => 'Admin\LeaveTypeController@deactivateMultiple'])->middleware('permission:' . Acl::PERMISSION_LEAVE_TYPE_MANAGE . '|' . Acl::PERMISSION_LEAVE_TYPE_EDIT_MANAGE);

		// 5. Employee Routes
		Route::get(     'employee',                            ['as' => 'employee.list',                       'uses' => 'Admin\EmployeeController@index'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_ONLY_MANAGE);
		Route::get(     'employee/all',                        ['as' => 'employee.all',                        'uses' => 'Admin\EmployeeController@all']);
		Route::get(     'employee/available',                  ['as' => 'employee.available',                  'uses' => 'Admin\EmployeeController@available']);
		Route::get(     'employee/severance/all',              ['as' => 'employee.severance.all',              'uses' => 'Admin\EmployeeController@availableSeverance']);
		Route::get(     'employee/{id}',                       ['as' => 'employee.show',                       'uses' => 'Admin\EmployeeController@show'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_EDIT_MANAGE);
		Route::post(    'employee',                            ['as' => 'employee.store',                      'uses' => 'Admin\EmployeeController@store'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_CREATE_MANAGE);
		Route::post(    'employee/import',                     ['as' => 'employee.import',                     'uses' => 'Admin\EmployeeController@import'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_CREATE_MANAGE);
		Route::post(    'employee/export',                     ['as' => 'employee.export',                     'uses' => 'Admin\EmployeeController@export'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_ONLY_MANAGE);
		Route::put(     'employee/{id}',                       ['as' => 'employee.update',                     'uses' => 'Admin\EmployeeController@update'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_EDIT_MANAGE);
		Route::delete(  'employee/{id}',                       ['as' => 'employee.destroy',                    'uses' => 'Admin\EmployeeController@destroy'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_DELETE_MANAGE);
		Route::delete(  'employee/multiple/destroy',           ['as' => 'employee.multiple.destroy',          'uses' => 'Admin\EmployeeController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_DELETE_MANAGE);
		Route::post(    'employee/multiple/activate',          ['as' => 'employee.multiple.activate',         'uses' => 'Admin\EmployeeController@activateMultiple'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_EDIT_MANAGE);
		Route::post(    'employee/multiple/deactivate',        ['as' => 'employee.multiple.deactivate',       'uses' => 'Admin\EmployeeController@deactivateMultiple'])->middleware('permission:' . Acl::PERMISSION_EMPLOYEE_MANAGE . '|' . Acl::PERMISSION_EMPLOYEE_EDIT_MANAGE);
		
		// 6. Position History Routes
		/*Route::get(     'position-history',                    ['as' => 'position-history.list',              'uses' => 'Admin\PositionHistoryController@index'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_ONLY_MANAGE);
		Route::get(     'position-history/all',                ['as' => 'position-history.all',               'uses' => 'Admin\PositionHistoryController@all']);
		Route::get(     'position-history/{id}',               ['as' => 'position-history.show',              'uses' => 'Admin\PositionHistoryController@show'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_EDIT_MANAGE);
		Route::post(    'position-history',                    ['as' => 'position-history.store',             'uses' => 'Admin\PositionHistoryController@store'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_CREATE_MANAGE);
		Route::put(     'position-history/{id}',               ['as' => 'position-history.update',            'uses' => 'Admin\PositionHistoryController@update'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_EDIT_MANAGE);
		Route::delete(  'position-history/{id}',               ['as' => 'position-history.destroy',           'uses' => 'Admin\PositionHistoryController@destroy'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_DELETE_MANAGE);
		Route::delete(  'position-history/multiple/destroy',    ['as' => 'position-history.multiple.destroy',  'uses' => 'Admin\PositionHistoryController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_POSITION_HISTORY_MANAGE . '|' . Acl::PERMISSION_POSITION_HISTORY_DELETE_MANAGE);*/

		// 8. Leave History Routes
		/*Route::get(     'leave-history',                       ['as' => 'leave-history.list',                'uses' => 'Admin\LeaveHistoryController@index'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_ONLY_MANAGE);
		Route::get(     'leave-history/all',                   ['as' => 'leave-history.all',                 'uses' => 'Admin\LeaveHistoryController@all']);
		Route::get(     'leave-history/{id}',                  ['as' => 'leave-history.show',                'uses' => 'Admin\LeaveHistoryController@show'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_EDIT_MANAGE);
		Route::post(    'leave-history',                       ['as' => 'leave-history.store',               'uses' => 'Admin\LeaveHistoryController@store'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_CREATE_MANAGE);
		Route::put(     'leave-history/{id}',                  ['as' => 'leave-history.update',              'uses' => 'Admin\LeaveHistoryController@update'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_EDIT_MANAGE);
		Route::delete(  'leave-history/{id}',                  ['as' => 'leave-history.destroy',             'uses' => 'Admin\LeaveHistoryController@destroy'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_DELETE_MANAGE);
		Route::delete(  'leave-history/multiple/destroy',       ['as' => 'leave-history.multiple.destroy',    'uses' => 'Admin\LeaveHistoryController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_LEAVE_HISTORY_MANAGE . '|' . Acl::PERMISSION_LEAVE_HISTORY_DELETE_MANAGE);*/

		// 9. Point Rate Routes
		Route::get(     'point-rate',                          ['as' => 'point-rate.list',                   'uses' => 'Admin\PointRateController@index'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_ONLY_MANAGE);
		Route::get(     'point-rate/all',                      ['as' => 'point-rate.all',                    'uses' => 'Admin\PointRateController@all']);
		Route::get(     'point-rate/{id}',                     ['as' => 'point-rate.show',                   'uses' => 'Admin\PointRateController@show'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_EDIT_MANAGE);
		Route::post(    'point-rate',                          ['as' => 'point-rate.store',                  'uses' => 'Admin\PointRateController@store'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_CREATE_MANAGE);
		Route::put(     'point-rate/{id}',                     ['as' => 'point-rate.update',                 'uses' => 'Admin\PointRateController@update'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_EDIT_MANAGE);
		Route::delete(  'point-rate/{id}',                     ['as' => 'point-rate.destroy',                'uses' => 'Admin\PointRateController@destroy'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_DELETE_MANAGE);
		Route::delete(  'point-rate/multiple/destroy',          ['as' => 'point-rate.multiple.destroy',       'uses' => 'Admin\PointRateController@destroyMultiple'])->middleware('permission:' . Acl::PERMISSION_POINT_RATE_MANAGE . '|' . Acl::PERMISSION_POINT_RATE_DELETE_MANAGE);

		// 11. Severance Payment Routes
		Route::get(     'severance-payment',                            ['as' => 'severance-payment.list',             		'uses' => 'Admin\SeverancePaymentController@index'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_ONLY_MANAGE);
		Route::get(     'severance-payment/all',                        ['as' => 'severance-payment.all',              		'uses' => 'Admin\SeverancePaymentController@all']);
		Route::get(     'severance-payment/{id}',                       ['as' => 'severance-payment.show',             		'uses' => 'Admin\SeverancePaymentController@show'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_EDIT_MANAGE);
		Route::get(     'severance-payment/progress/{code}',            ['as' => 'severance-payment.progress',         		'uses' => 'Admin\SeverancePaymentController@checkProgress'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment',                            ['as' => 'severance-payment.store',            		'uses' => 'Admin\SeverancePaymentController@store'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/history',                    ['as' => 'severance-payment.store.history',    		'uses' => 'Admin\SeverancePaymentController@storeHistory'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/once/{id}',                  ['as' => 'severance-payment.make.once',  	   		'uses' => 'Admin\SeverancePaymentController@severanceOnce'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/single/{id}',                ['as' => 'severance-payment.make.single',  	   		'uses' => 'Admin\SeverancePaymentController@severanceSingle'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/multiple/{code}',            ['as' => 'severance-payment.make.multiple',    		'uses' => 'Admin\SeverancePaymentController@severanceMultiple'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/history/destroy',            ['as' => 'severance-payment.items.destroy',    		'uses' => 'Admin\SeverancePaymentController@historyItemsDestroy'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/store/multiple',             ['as' => 'severance-payment.items.store',      		'uses' => 'Admin\SeverancePaymentController@storeMultiple'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'severance-payment/history/multiple',           ['as' => 'severance-payment.histories.update', 		'uses' => 'Admin\SeverancePaymentController@updateHistoryMultiple'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::put(     'severance-payment/{id}',                       ['as' => 'severance-payment.update',           		'uses' => 'Admin\SeverancePaymentController@update'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_EDIT_MANAGE);
		Route::put(     'severance-payment/history/{id}',               ['as' => 'severance-payment.update.history',   		'uses' => 'Admin\SeverancePaymentController@updateHistory'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_EDIT_MANAGE);
		Route::delete(  'severance-payment/{id}',                       ['as' => 'severance-payment.destroy',          		'uses' => 'Admin\SeverancePaymentController@destroy'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_DELETE_MANAGE);
		Route::delete(  'severance-payment/history/{code}',             ['as' => 'severance-payment.history.destroy',  		'uses' => 'Admin\SeverancePaymentController@historyDestroy'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_DELETE_MANAGE);
		Route::post(    'severance-payment/single-download/{id}',       ['as' => 'severance-payment.download.single',  		'uses' => 'Admin\SeverancePaymentController@singleDownload'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_ONLY_MANAGE);

		// 12. Retirement Fund Routes
		Route::get(     'retirement-fund',                     ['as' => 'retirement-fund.list',              'uses' => 'Admin\RetirementFundController@index'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_ONLY_MANAGE);
		Route::get(     'retirement-fund/all',                 ['as' => 'retirement-fund.all',               'uses' => 'Admin\RetirementFundController@all']);
		Route::get(     'retirement-fund/{id}',                ['as' => 'retirement-fund.show',              'uses' => 'Admin\RetirementFundController@show'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_EDIT_MANAGE);
		Route::post(    'retirement-fund',                     ['as' => 'retirement-fund.store',             'uses' => 'Admin\RetirementFundController@store'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_CREATE_MANAGE);
		Route::put(     'retirement-fund/{id}',                ['as' => 'retirement-fund.update',            'uses' => 'Admin\RetirementFundController@update'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_EDIT_MANAGE);
		Route::delete(  'retirement-fund/{id}',                ['as' => 'retirement-fund.destroy',           'uses' => 'Admin\RetirementFundController@destroy'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_DELETE_MANAGE);
		Route::post(    'retirement-fund/calculate',           ['as' => 'retirement-fund.calculate',         'uses' => 'Admin\RetirementFundController@calculate'])->middleware('permission:' . Acl::PERMISSION_RETIREMENT_FUND_MANAGE . '|' . Acl::PERMISSION_RETIREMENT_FUND_EDIT_MANAGE);
		
		// 13. Transition Point Routes
		Route::get(     'transition-point',          ['as' => 'transition-point.list',     'uses' => 'Admin\TransitionPointController@index'])->middleware('permission:' . Acl::PERMISSION_TRANSITION_POINT_MANAGE . '|' . Acl::PERMISSION_TRANSITION_POINT_ONLY_MANAGE);
		Route::get(     'transition-point/all',      ['as' => 'transition-point.all',      'uses' => 'Admin\TransitionPointController@all']);
		Route::get(     'transition-point/{id}',     ['as' => 'transition-point.show',     'uses' => 'Admin\TransitionPointController@show'])->middleware('permission:' . Acl::PERMISSION_TRANSITION_POINT_MANAGE . '|' . Acl::PERMISSION_TRANSITION_POINT_EDIT_MANAGE);
		Route::post(    'transition-point',          ['as' => 'transition-point.store',    'uses' => 'Admin\TransitionPointController@store'])->middleware('permission:' . Acl::PERMISSION_TRANSITION_POINT_MANAGE . '|' . Acl::PERMISSION_TRANSITION_POINT_CREATE_MANAGE);
		Route::put(     'transition-point/{id}',     ['as' => 'transition-point.update',   'uses' => 'Admin\TransitionPointController@update'])->middleware('permission:' . Acl::PERMISSION_TRANSITION_POINT_MANAGE . '|' . Acl::PERMISSION_TRANSITION_POINT_EDIT_MANAGE);
		Route::delete(  'transition-point/{id}',     ['as' => 'transition-point.destroy',  'uses' => 'Admin\TransitionPointController@destroy'])->middleware('permission:' . Acl::PERMISSION_TRANSITION_POINT_MANAGE . '|' . Acl::PERMISSION_TRANSITION_POINT_DELETE_MANAGE);
		
		// 14. Point Table Routes
		Route::get(     'point-table',              ['as' => 'point-table.list',          'uses' => 'Admin\PointTableController@index'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_ONLY_MANAGE);
		Route::get(     'point-table/all',          ['as' => 'point-table.all',           'uses' => 'Admin\PointTableController@all']);
		Route::get(     'point-table/{id}',         ['as' => 'point-table.show',          'uses' => 'Admin\PointTableController@show'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_EDIT_MANAGE);
		Route::post(    'point-table',              ['as' => 'point-table.store',         'uses' => 'Admin\PointTableController@store'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_CREATE_MANAGE);
		Route::put(     'point-table/{id}',         ['as' => 'point-table.update',        'uses' => 'Admin\PointTableController@update'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_EDIT_MANAGE);
		Route::delete(  'point-table/{id}',         ['as' => 'point-table.destroy',       'uses' => 'Admin\PointTableController@destroy'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_DELETE_MANAGE);
		Route::get(     'point-table/active',       ['as' => 'point-table.active',        'uses' => 'Admin\PointTableController@active'])->middleware('permission:' . Acl::PERMISSION_POINT_TABLE_MANAGE . '|' . Acl::PERMISSION_POINT_TABLE_ONLY_MANAGE);
		
		// 15. Level Routes
		Route::get(     'level',              			['as' => 'level.list',          			'uses' => 'Admin\LevelController@index'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_ONLY_MANAGE);
		Route::get(     'level/all',          			['as' => 'level.all',           			'uses' => 'Admin\LevelController@all']);
		Route::get(     'level/all/detail',   			['as' => 'level.all.detail',    			'uses' => 'Admin\LevelController@allDetail']);
		Route::get(     'level/all/nested',   			['as' => 'level.all.nested',    			'uses' => 'Admin\LevelController@allNested']);
		Route::get(     'level/{id}',         			['as' => 'level.show',          			'uses' => 'Admin\LevelController@show'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_EDIT_MANAGE);
		Route::post(    'level',              			['as' => 'level.store',         			'uses' => 'Admin\LevelController@store'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_CREATE_MANAGE);
		Route::post(    'level/employment',   			['as' => 'level.store.employment',         	'uses' => 'Admin\LevelController@storeEmployment'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_CREATE_MANAGE);
		Route::put(     'level/{id}',         			['as' => 'level.update',        			'uses' => 'Admin\LevelController@update'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_EDIT_MANAGE);
		Route::put(     'level/employment/{id}',        ['as' => 'level.update.employment',        	'uses' => 'Admin\LevelController@updateEmployment'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_EDIT_MANAGE);
		Route::delete(  'level/{id}',         			['as' => 'level.destroy',       			'uses' => 'Admin\LevelController@destroy'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_DELETE_MANAGE);
		Route::get(     'level/active',       			['as' => 'level.active',        			'uses' => 'Admin\LevelController@active'])->middleware('permission:' . Acl::PERMISSION_LEVEL_MANAGE . '|' . Acl::PERMISSION_LEVEL_ONLY_MANAGE);
		
		// 16. Payout Routes
		Route::get(     'payout',              ['as' => 'payout.list',          'uses' => 'Admin\PayoutController@index'])->middleware('permission:' . Acl::PERMISSION_PAYOUT_MANAGE . '|' . Acl::PERMISSION_PAYOUT_ONLY_MANAGE);
		Route::get(     'payout/all',          ['as' => 'payout.all',           'uses' => 'Admin\PayoutController@all']);
		Route::get(     'payout/{id}',         ['as' => 'payout.show',          'uses' => 'Admin\PayoutController@show'])->middleware('permission:' . Acl::PERMISSION_PAYOUT_MANAGE . '|' . Acl::PERMISSION_PAYOUT_EDIT_MANAGE);
		Route::post(    'payout',              ['as' => 'payout.store',         'uses' => 'Admin\PayoutController@store'])->middleware('permission:' . Acl::PERMISSION_PAYOUT_MANAGE . '|' . Acl::PERMISSION_PAYOUT_CREATE_MANAGE);
		Route::put(     'payout/{id}',         ['as' => 'payout.update',        'uses' => 'Admin\PayoutController@update'])->middleware('permission:' . Acl::PERMISSION_PAYOUT_MANAGE . '|' . Acl::PERMISSION_PAYOUT_EDIT_MANAGE);
		Route::delete(  'payout/{id}',         ['as' => 'payout.destroy',       'uses' => 'Admin\PayoutController@destroy'])->middleware('permission:' . Acl::PERMISSION_PAYOUT_MANAGE . '|' . Acl::PERMISSION_PAYOUT_DELETE_MANAGE);
		
		// Report
		Route::get(     'report/progress/{code}',     ['as' => 'report.progress',      'uses' => 'Admin\ReportController@checkProgress'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		Route::post(    'report/generate',     		  ['as' => 'report.generate',      'uses' => 'Admin\ReportController@generate'])->middleware('permission:' . Acl::PERMISSION_SEVERANCE_PAYMENT_MANAGE . '|' . Acl::PERMISSION_SEVERANCE_PAYMENT_CREATE_MANAGE);
		
		// Import
		Route::post(    'import',                     ['as' => 'import.store',         'uses' => 'Admin\ImportController@store'])->middleware('role:' . Acl::ROLE_ADMIN . '|' . Acl::ROLE_MANAGER);
		
		// Export
		Route::post(    'export/all',                 ['as' => 'export.generate',      'uses' => 'Admin\ExportController@generate'])->middleware('role:' . Acl::ROLE_ADMIN . '|' . Acl::ROLE_MANAGER);
		
		// Media
        Route::get(         'media',                     [ 'as' => 'media.index',                 'uses' => 'Admin\MediaController@index' ]);
        Route::get(         'media/{id}',                [ 'as' => 'media.show',                  'uses' => 'Admin\MediaController@show' ]);
        Route::post(        'media',                     [ 'as' => 'media.store',                 'uses' => 'Admin\MediaController@store' ]);
        Route::put(         'media/{id}',                [ 'as' => 'media.update',                'uses' => 'Admin\MediaController@update' ]);
        Route::delete(      'media/{id}',                [ 'as' => 'media.destroy',               'uses' => 'Admin\MediaController@destroy' ]);
        Route::delete(      'media/multiple/destroy',    [ 'as' => 'media.multiple.destroy',      'uses' => 'Admin\MediaController@destroyMultiple' ]);
        Route::post(        'media/upload/file',         [ 'as' => 'media.upload.file',           'uses' => 'Admin\MediaController@uploadFile' ]);

		// Notify
        Route::get(         'notify/all',               [ 'as' => 'notify.all',                    'uses' => 'Admin\NotifyController@all' ]);
        Route::post(        'notify',                   [ 'as' => 'notify.update',                 'uses' => 'Admin\NotifyController@update' ]);
        Route::delete(      'notify',                   [ 'as' => 'notify.destroy',                'uses' => 'Admin\NotifyController@destroy' ]);
        Route::put(         'notify/{id}',              [ 'as' => 'notify.mark',                   'uses' => 'Admin\NotifyController@mark' ]);

		// Setting
        Route::get(         'setting',                  [ 'as' => 'setting.index',                 'uses' => 'Admin\SettingController@index' ])->middleware('permission:' . Acl::PERMISSION_SETTING_MANAGE . '|' . Acl::PERMISSION_SETTING_ONLY_MANAGE);
        Route::get(         'setting/all',              [ 'as' => 'setting.all',                   'uses' => 'Admin\SettingController@all' ]);
        Route::post(        'setting/multiple/update',  [ 'as' => 'setting.multiple.update',       'uses' => 'Admin\SettingController@update' ])->middleware('permission:' . Acl::PERMISSION_SETTING_MANAGE . '|' . Acl::PERMISSION_SETTING_EDIT_MANAGE);
    });
});
