<?php

Route::get('/', 'App\Packages\v4\Core\Controllers\HomeController@index');

Route::group([
    'middleware' => ['api_key_middleware', 'database_query_log'],
    'namespace' => 'App\PackagesApi\v4\Controllers',
    'prefix' => 'v4',
], function() {

    /** Auth routes */
    Route::group(['prefix' => 'auth', 'as' => 'auth.'], function() {

        /** Phone auth */
        Route::post('send-phone-code', 'User\AuthController@sendPhoneCode')->name('send-phone-code');
        Route::post('login/phone', 'User\AuthController@phoneLogin')->name('login-phone');

        /** Email auth */
        Route::post('register/email', 'User\AuthController@emailRegisterInit')->name('register-email');
        Route::post('register/email-validate', 'User\AuthController@emailRegisterValidate')->name('validate-register-email');
        Route::post('register/email-complete', 'User\AuthController@emailRegisterComplete')->name('complete-register-email');
        Route::post('login/email', 'User\AuthController@emailLogin')->name('login-email');

        /** Social auth */
        Route::post('login/facebook', 'User\AuthController@facebookLogin')->name('login-facebook');
        Route::post('login/google', 'User\AuthController@googleLogin')->name('login-google');
        Route::post('login/apple', 'User\AuthController@appleLogin')->name('login-apple');
    });

    Route::group(['middleware' => 'auth:token'], function(){

        /**
         * Search routes
         */
        Route::group(['prefix' => 'search', 'as' => 'search.'], function () {

            /** Only users search route */
            Route::get('users', 'Search\SearchController@onlyUsers')->name('only-users');

            /** Only capsule search route */
            Route::get('capsules', 'Search\SearchController@onlyCapsules')->name('only-capsules');

            /** All types search route */
            Route::get('all', 'Search\SearchController@searchAll')->name('search-all');

        });

        /**
         * Profile feed and timeline
         */
        Route::group(['prefix' => 'feed', 'as' => 'feed.'], function() {
            /** Timeline with only locked capsules */
            Route::get('timeline-locked', 'Feed\FeedController@timelineLocked')->name('timeline-locked');

            /** Timeline with only unlocked capsules */
            Route::get('timeline-unlocked', 'Feed\FeedController@timelineUnlocked')->name('timeline-unlocked');

            Route::get('profile', 'Feed\ProfileController@profile')->name('profile');

            Route::post('remove-tag', 'Feed\FeedController@removeTag')->name('remove-tag');
            Route::post('remove-capsule', 'Feed\FeedController@remove')->name('remove-capsule');

        });

        /** User profile */
        Route::group(['prefix' => 'user', 'as' => 'user.'], function() {

            Route::get('updates', 'User\UserController@updates')->name('updates');
            Route::get('profile', 'User\UserController@profile')->name('profile');
            Route::get('info/nickname/{nickname}', 'User\UserController@infoByUsername')->name('info-nickname');
            Route::match(['get', 'post'],'info/{userUuid}', 'User\UserController@info')->name('info');
        });

        /** Capsule create methods */
        Route::group(['prefix' => 'capsule', 'as' => 'capsule.'], function() {

            Route::post('create/start', 'Capsule\CreateController@start')->name('create.start');
            Route::post('create/cancel', 'Capsule\CreateController@cancel')->name('create.cancel');

            Route::post('create/upload-preview', 'Capsule\CreateController@uploadPreview')->name('create.upload-preview');
            Route::post('create/complete', 'Capsule\CreateController@complete')->name('create.complete');

            Route::post('edit/tagged-users', 'Capsule\CreateController@tagUsers')->name('edit.tagged-users');

            Route::post('destroy', 'Capsule\CreateController@destroy')->name('destroy');
        });

        /** Capsule edit methods */
        Route::group(['prefix' => 'capsule', 'as' => 'capsule.'], function () {

            Route::post('update', 'Capsule\UpdateController@update')->name('update.capsule');
            Route::post('update/upload-preview', 'Capsule\UpdateController@uploadPreview')->name('update.upload-preview');
        });

        /** Capsule methods */
        Route::group(['prefix' => 'capsule', 'as' => 'capsule.'], function() {

            Route::get('user/list', 'Capsule\UserController@getListForTag')->name('users-list');

            Route::get('info/{capsule_id}', 'Capsule\InfoController@info')->name('info');
            Route::get('comments/{capsule_id}', 'Capsule\InfoController@comments')->name('comments');

            Route::get('likes/{capsule_id}', 'Capsule\InfoController@likesList')->name('likes');
            Route::get('subscribers/{capsule_id}', 'Capsule\InfoController@subscriberList')->name('subscribers');

            Route::group([
                'middleware' => 'string_bool'
            ], function () {
                Route::post('open', 'Capsule\InfoController@open')->name('open');
            });

            Route::post('likes/add', 'Capsule\InfoController@like')->name('add-like');
            Route::post('subscribers/add', 'Capsule\InfoController@subscribe')->name('add-subscriber');

            Route::post('comments/add', 'Capsule\InfoController@addComment')->name('add-comment');
            Route::post('comments/edit', 'Capsule\InfoController@editComment')->name('edit-comment');
            Route::post('comments/delete', 'Capsule\InfoController@deleteComment')->name('delete-comment');
        });

        /** Profile feed and timeline */
        Route::group(['prefix' => 'global', 'as' => 'global.'], function() {
            Route::get('settings', 'Core\GlobalController@settings')->name('settings');
            Route::get('server_time', 'Core\GlobalController@serverTime')->name('server-time');
            Route::get('messages', 'Core\GlobalController@messages')->name('messages');
        });

        /** Followers methods */
        Route::group(['prefix' => 'followers', 'as' => 'followers.'], function() {
            Route::get('count', 'Follower\FollowerController@countUserFollowers')->name('count');
            Route::get('list', 'Follower\FollowerController@getUserFollowers')->name('list');

            /** Followers for accept if private profile */
            Route::get('wait-confirmation-count', 'Follower\FollowerController@waitConfirmationCount')->name('wait-confirmation-count');
            Route::get('wait-confirmation-list', 'Follower\FollowerController@waitConfirmationList')->name('wait-confirmation-list');
            Route::post('wait-confirmation-approve', 'Follower\ActionController@waitConfirmationApprove')->name('wait-confirmation-approve');
            Route::post('wait-confirmation-decline', 'Follower\ActionController@waitConfirmationDecline')->name('wait-confirmation-decline');

            /** Followers Actions */
            Route::post('follow', 'Follower\ActionController@followUser')->name('follow');
            Route::post('un-follow', 'Follower\ActionController@unFollowUser')->name('un-follow');
        });

        /** Following methods */
        Route::group(['prefix' => 'following', 'as' => 'following.'], function () {
            Route::get('count', 'Follower\FollowerController@countUserFollowing')->name('count');
            Route::get('list', 'Follower\FollowerController@getUserFollowing')->name('list');
        });

        /** Notification methods */
        Route::group(['prefix' => 'notification', 'as' => 'notification.'], function() {

            Route::get('list', 'User\NotificationController@getList')->name('list');
            Route::post('register-token', 'User\NotificationController@registerPushToken')->name('register-token');
            Route::post('un-register-token', 'User\NotificationController@unRegisterPushToken')->name('un-register-token');
            Route::post('is-seen', 'User\NotificationController@isSeen')->name('is-seen');
        });

        /** Settings method */
        Route::group(['prefix' => 'settings', 'as' => 'settings.'], function() {

            Route::get('settings', 'User\SettingsController@settings')->name('settings');
            Route::post('update', 'User\SettingsController@update')->name('update');
            Route::post('update-nickname', 'User\SettingsController@updateNickname')->name('update-nickname');
            Route::post('onboarding-update', 'User\SettingsController@onBoardingUpdate')->name('onboarding-update');
            Route::post('upload-avatar', 'User\SettingsController@uploadAvatar')->name('upload-avatar');
            Route::post('remove-avatar', 'User\SettingsController@removeAvatar')->name('remove-avatar');
            Route::post('delete-user', 'User\SettingsController@deleteUser')->name('delete-user');
        });

        /** Report methods (support - feedback, problem) */
        Route::group(['prefix' => 'report', 'as' => 'report.'], function() {

            Route::post('comment', 'Core\ReportController@sendComment')->name('comment');
            Route::post('capsule', 'Core\ReportController@sendCapsule')->name('capsule');
            Route::post('feedback', 'Core\ReportController@sendFeedback')->name('feedback');
            Route::post('problem', 'Core\ReportController@sendProblem')->name('problem');
        });

        /** Places, location methods */
        Route::group(['prefix' => 'location', 'as' => 'location.'], function() {

            Route::post('places', 'Core\LocationController@places')->name('places');
            Route::post('search', 'Core\LocationController@search')->name('search');
        });

    });

});
