<?php

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

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


    Route::group(['prefix' => 'auth', 'as' => 'auth.'], function() {
        Route::post('send-phone-code', 'User\AuthController@sendPhoneCode')->name('send-phone-code');
        Route::post('login', 'User\AuthController@login')->name('login');
        Route::post('verify-code', 'User\AuthController@verifyPhoneCodeAndRegister')->name('verify-code');
    });


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

        /** 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');
        });

        /** 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/{userUuid}', 'User\UserController@info')->name('info');
        });

        /** 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');
        });

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

            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::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');
        });

        /** 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-friends', 'Capsule\CreateController@tagFriends')->name('edit.tagged-friends');

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

        /**
         * Profile feed and timeline
         */
        Route::group(['prefix' => 'feed', 'as' => 'feed.'], function() {

            Route::get('timeline-initial', 'Feed\FeedController@timelineInitial')->name('timeline-initial');

            Route::get('timeline-past', 'Feed\FeedController@timeLinePast')->name('timeline-past');
            Route::get('timeline-future', 'Feed\FeedController@timeLineFuture')->name('timeline-future');

            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');
        });

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

            Route::get('list', 'Friend\InviteController@invites')->name('list');
            Route::get('sent-list', 'Friend\InviteController@sentInvites')->name('sent-list');

            Route::post('user-by-phone', 'Friend\InviteController@userByPhone')->name('user-by-phone');

            Route::post('send', 'Friend\InviteController@sendInvite')->name('send');
            Route::post('accept', 'Friend\InviteController@acceptInvite')->name('accept');
            Route::post('decline', 'Friend\InviteController@declineInvite')->name('decline');

//            Route::post('invite-by-hash', 'Friend\InviteController@inviteByHash')->name('user-by-phone');
        });

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

            Route::get('count', 'Friend\FriendController@friendsCount')->name('count');
            Route::get('list', 'Friend\FriendController@friendsList')->name('list');
            Route::post('remove', 'Friend\FriendController@removeFriend')->name('remove');
        });

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

            Route::post('list-sync', 'Friend\ContactsController@contactsListSync')->name('list-sync');
        });


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

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

            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');
        });

    });
});
