<?php

if (env('FORCE_SCHEME_HTTPS', false)) {
	URL::forceScheme('https');
}

use App\PackagesAdmin\Middleware\AuthenticatedAdmin;

Route::group([
	'namespace' => 'App\PackagesAdmin\Manager\Controllers',
], function () {

	Route::group(['as' => 'admin-auth.'], function () {
		Route::group(['as' => 'form.'], function () {
			Route::get('/login', 'AuthController@loginForm')->name('login');
		});

		Route::group(['as' => 'action.'], function () {
			Route::post('/login', 'AuthActionController@login')->name('login');
			Route::get('/logout', 'AuthActionController@logout')->name('logout');
		});
	});
});


Route::group(['middleware' => [AuthenticatedAdmin::class]], function() {

	Route::group([
		'namespace' => 'App\PackagesAdmin\Core\Controllers',
		'as' => 'admin.',
	], function () {

		Route::get('/', 'IndexController@index')->name('home');
		//Route::get('/phpinfo', 'IndexController@phpInfo')->name('phpinfo');
	});

	Route::group([
		'namespace' => 'App\PackagesAdmin\Capsule\Controllers', 'as' => 'admin.',
	], function () {

		Route::group(['as' => 'capsule.', 'prefix' => 'capsule', 'middleware' => 'manager_permission:capsules.full|capsules.reported'], function () {

		    // Capsule
		    Route::get('/', 'CapsuleController@index')->name('list');
			Route::get('{id}', 'CapsuleController@show')->name('show');
			Route::get('{id}/edit', 'CapsuleController@edit')->name('edit');
			Route::put('{id}', 'CapsuleController@update')->name('update');
			Route::post('{id}/block', 'CapsuleController@block')->name('block');
			Route::delete('{id}', 'CapsuleController@destroy')->name('destroy');

			/** Export */
            Route::get('export/{format}', 'CapsuleController@export')->name('export');

			Route::get('{id}/comments', 'CapsuleController@commentsList')->name('capsule_comment.list');
			Route::get('{id}/tagged_users', 'CapsuleController@taggedUsersList')->name('capsule_tagged_user.list');
			Route::get('{id}/subscribers', 'CapsuleController@subscribersList')->name('capsule_subscriber.list');
			Route::get('{id}/reports', 'CapsuleController@reportsList')->name('capsule_reports.list');

			// Capsule Comments
            Route::group(['as' => 'comment.', 'prefix' => 'comment'], function () {
                Route::delete('{id}', 'CapsuleCommentController@destroy')->name('destroy');
            });

            // Capsule Tagged User
            Route::group(['as' => 'tagged_user.', 'prefix' => 'tagged_user'], function () {
                Route::delete('{id}', 'CapsuleTaggedUserController@destroy')->name('destroy');
            });

            // Capsule Subscriber
            Route::group(['as' => 'subscriber.', 'prefix' => 'subscriber'], function () {
                Route::delete('{id}', 'CapsuleSubscriberController@destroy')->name('destroy');
            });
		});
	});

	Route::group([
	    'namespace' => 'App\PackagesAdmin\CapsuleReport\Controllers', 'as' => 'admin.'
    ], function () {

        Route::group(['as' => 'reported_capsule.', 'prefix' => 'reported_capsule', 'middleware' => 'manager_permission:reported_capsules'], function () {

            Route::get('/', 'CapsuleReportController@index')->name('list');
            Route::post('toggle/{id}', 'CapsuleReportController@toggle')->name('toggle');
            Route::delete('destroy/{id}', 'CapsuleReportController@destroy')->name('destroy');
        });
    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\CapsuleCommentReport\Controllers', 'as' => 'admin.'
    ], function () {

	    Route::group(['as' => 'reported_comment.', 'prefix' => 'reported_comment', 'middleware' => 'manager_permission:reported_comments'], function () {

	        Route::get('/', 'CapsuleCommentReportController@index')->name('list');
	        Route::delete('destroy/{id}', 'CapsuleCommentReportController@destroy')->name('destroy');
        });
    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\User\Controllers', 'as' => 'admin.',
    ], function () {

	    Route::group(['as' => 'user.', 'prefix' => 'user', 'middleware' => 'manager_permission:users.full|users.data'], function () {

            // User Friend
            Route::group(['as' => 'friend.', 'prefix' => 'friend'], function () {
                Route::delete('{id}', 'UserFriendController@destroy')->name('destroy');
            });

	        Route::get('/', 'UserController@index')->name('list');
	        Route::get('{id}', 'UserController@show')->name('show');
	        Route::get('{id}/edit', 'UserController@edit')->name('edit');
	        Route::put('{id}', 'UserController@update')->name('update');
	        Route::get('block/{id}', 'UserController@toggleBlock')->name('toggle_block');
	        Route::delete('{id}', 'UserController@destroy')->name('destroy');

            /** Export */
            Route::get('export/{format}', 'UserController@export')->name('export');

            Route::get('{id}/friends', 'UserController@friendsList')->name('user_friends.list');
            Route::get('{id}/capsules', 'UserController@capsulesList')->name('user_capsules.list');
            Route::get('{id}/comments', 'UserController@commentsList')->name('user_comments.list');
            Route::get('{id}/access_log', 'UserController@accessLogList')->name('user_access_log.list');

        });

    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\SMSLog\Controllers',
        'as' => 'admin.'
    ], function () {

	    Route::group(['as' => 'sms_log.', 'prefix' => 'sms_log', 'middleware' => 'manager_permission:sms_log'], function () {

	        Route::get('/', 'SMSLogController@index')->name('list');

        });

    });

	Route::group([
        'namespace' => 'App\PackagesAdmin\Support\Controllers', 'as' => 'admin.',
    ], function () {

	    Route::group(['as' => 'support.', 'prefix' => 'support', 'middleware' => 'manager_permission:feedback_problem'], function () {

	        Route::get('/', 'SupportController@index')->name('list');
	        Route::get('{id}', 'SupportController@show')->name('show');
	        Route::get('status/{id}', 'SupportController@toggleStatus')->name('toggle_status');
	        Route::delete('{id}', 'SupportController@destroy')->name('destroy');

        });
    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\ApiDoc\Controllers', 'as' => 'admin.',
    ], function () {

	    Route::group(['as' => 'api_doc.', 'prefix' => 'api_doc', 'middleware' => 'manager_permission:api_doc'], function () {

	        Route::get('/{version?}', 'ApiDocController@index')->name('list');

        });
    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\Cron\Controllers', 'as' => 'admin.',
    ], function () {

	    Route::group(['as' => 'cron.', 'prefix' => 'cron'], function () {

            // admin.cron.log
	        Route::group(['as' => 'log.', 'prefix' => 'log', 'middleware' => 'manager_permission:cron_log'], function () {

	            Route::get('/', 'CronLogController@index')->name('list');
            });
        });
    });

	Route::group([
	    'namespace' => 'App\PackagesAdmin\Manager\Controllers', 'as' => 'admin.',
    ], function () {

	    Route::group(['as' => 'manager.', 'prefix' => 'manager', 'middleware:managers'], function () {

            Route::get('/', 'ManagerController@index')->name('list');
            Route::get('create', 'ManagerController@create')->name('create');
            Route::post('store', 'ManagerController@store')->name('store');
            Route::get('edit/{id}', 'ManagerController@edit')->name('edit');
            Route::put('update/{id}', 'ManagerController@update')->name('update');
            Route::delete('delete/{id}', 'ManagerController@destroy')->name('destroy');

            Route::group(['as' => 'role.', 'prefix' => 'role'], function () {

                Route::get('/', 'ManagerRoleController@index')->name('list');
                Route::get('create', 'ManagerRoleController@create')->name('create');
                Route::post('store', 'ManagerRoleController@store')->name('store');
                Route::get('edit/{id}', 'ManagerRoleController@edit')->name('edit');
                Route::put('update/{id}', 'ManagerRoleController@update')->name('update');
                Route::delete('delete/{id}', 'ManagerRoleController@destroy')->name('destroy');

            });

        });

    });

});