    <?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

use App\Jobs\CreditPurchaseJob;
use App\Mail\CreditPurchaseMail;
use App\Notifications\CreditPurchase;
use App\User;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Route;

    Route::get('/', [
    'uses' => 'DashboardController@goto_main_route',
    'as' => 'main_route'
]);

Route::get('password', function(){
    return bcrypt('developer');
});

Route::get('/home', [
    'uses' => 'DashboardController@goto_main_route',
    'as' => 'home'
]);


Route::get('verify/{code}','DashboardController@verify')->name('verify');
Route::get('sender_id/{code}/update','Admin\UserController@update_user_sender_id')->name('company.sender-id.approve-or-reject');


/*
|--------------------------------------------------------------------------
| Unprotected route for Guess only
|--------------------------------------------------------------------------
*/
    Route::group(['middleware'=> ['guest']], function() {

    /*
    |--------------------------------------------------------------------------
    | Route for Login
    |--------------------------------------------------------------------------
    */
    Route::get('get-form', 'LoginController@form_data')->name('login.forms');
    Route::get('reseller/get-form', 'LoginController@form_data')->name('login.forms');
    Route::get('admin/get-form2', 'Admin\LoginController@form_data')->name('login.form2');

    Route::get('/login', [
        'uses' => 'LoginController@getLogin',
        'as' => 'login'
    ]);

    Route::post('/login', [ 'uses' => 'LoginController@postLogin', 'as' => 'post_login' ]);

    Route::get ( 'redirect/{service}', 'SocialAuthController@redirect')->name('redirect_sm');
    Route::get ( 'callback/{service}', 'SocialAuthController@callback')->name('service.callback');


    Route::get('/errorx',['uses'=>'LoginController@error_page','as'=>'errors_pages']);


    Route::get('/register', function () { return view('layouts.register'); })->name('register');



    Route::post('/register/company','Client\CompanyController@create')->name('register.company');

    Route::any('tmp/register/{tmpcode}','Client\CompanyController@create')->name('register.company.tmp');

    //social medial

    Route::get('login/{provider}','LoginController@redirectTogoogle')->where('provider','google|facebook');

    Route::get('login/{provider}/callback', 'LoginController@handlegoogleCallback')->where('provider','google|facebook');

    Route::post('/register', ['uses' => 'LoginController@postRegistration','as' => 'post_register']);

    /*
    |--------------------------------------------------------------------------
    | Route for Password Reset
    |--------------------------------------------------------------------------
    */
    Route::get('/reset-password', function () { return view('layouts.reset_password');})->name('reset_password');

    Route::post('/reset-password', ['uses' => 'Auth\ForgotPasswordController@sendResetLink', 'as' => 'password.reset' ]);

//    Route::post('/reset-password', ['uses' => 'Auth\ForgotPasswordController@sendResetLinkEmail', 'as' => 'password.reset' ]);

    Route::post('/password/reset', [ 'uses' => 'Auth\ResetPasswordController@reset']);

    Route::get('/reset-password/{token}', [ 'uses' => 'Auth\ResetPasswordController@showResetForm' ]);

    /*
    |--------------------------------------------------------------------------
    | Route for locked users
    |--------------------------------------------------------------------------
    */
    Route::get('/user-locked', [ 'uses' => 'SettingController@get_locked_user', 'as' => 'settings.get_locked_user'  ]);

    Route::post('/user-locked', [ 'uses' => 'SettingController@check_locked_user', 'as' => 'settings.check_locked_user' ]);

});


Route::group(['middleware' => ['auth']], function () {
    /*
    |--------------------------------------------------------------------------
    | Dashboard Route
    |--------------------------------------------------------------------------
    */

//    Route::get('/dashboard', [ 'uses' => 'DashboardController@index', 'as' => 'app'   ])->middleware(['can:view-sms-dashboard']);
    Route::get('/dashboard', function()
    {
        return 'Hello World';
    });
    //Email Dashboard
    Route::get('/email-dashboard', [
        'uses' => 'DashboardController@email_index',
        'as' => 'app.email'
    ])->middleware(['can:view-email-dashboard']);

    //Email Dashboard
    Route::get('/voice-dashboard', [
        'uses' => 'DashboardController@voice_index',
        'as' => 'app.voice'
    ]);

    Route::get('/new-purchase', [
        'uses' => 'DashboardController@newPurchase',
        'as' => 'newPurchase'
    ]);

    Route::match(['get','post'],'BuyCredit','DashboardController@buy_now')->name('buynow');

    Route::get('sendOTPCode','DashboardController@sendOTPCode')->name('sendOTPCode');

    Route::get('verifyOTPCode','DashboardController@verifyOTPCode')->name('verifyOTPCode');
    /*
    |--------------------------------------------------------------------------
    | Logout Route
    |--------------------------------------------------------------------------
    */
    Route::get('/logout', [    'uses' => 'DashboardController@logout', 'as' => 'logout'   ]);


    /*
    |--------------------------------------------------------------------------
    | User Profile Route
    |--------------------------------------------------------------------------
    */
    Route::get('/profile', [
        'uses' => 'DashboardController@get_user_profile',
        'as' => 'profile'
    ])->middleware(['can:edit-profile']);



    Route::group(['prefix'=>'social'],function (){

        Route::get('index','SocialMediaController@index')->name('social.index');
        Route::any('dashboard','SocialMediaController@dashboard')->name('social.message.index');
        Route::any('post-message','SocialMediaController@message')->name('social.message.post');


        Route::group(['prefix'=>'ajax'],function (){
            Route::get('facebook','SocialMediaController@ajax_facebook')->name('social.ajax.facebook');
        });


        /** facebook routes **/
       Route::get('fb-redirect','SocialMediaController@fb_loginIsValidated')->name('social.facebook');
       Route::get('fb-accounts','SocialMediaController@fb_accounts')->name('social.facebook.accounts');
       Route::get('fb-data','SocialMediaController@fb_retrieved_data')->name('social.facebook.data'); //after successful redirecting


        /** Instagram Routes **/
       Route::get('instagram','SocialMediaController@instagram')->name('social.instagram');
       Route::get('in-redirect','SocialMediaController@ins_redirected')->name('social.ins-redirected');
       Route::get('in-access-callback','SocialMediaController@ins_access_callback')->name('social.ins-access-callback');


       /** Linked-In Routes **/
       Route::get('linkedin','SocialMediaController@linkedIn')->name('social.linkedin');
       Route::get('linkedin/callback','SocialMediaController@linkedIn0Auth')->name('social.linkedin.callback');
       Route::any('linkedin/page','SocialMediaController@linked_page')->name('social.linkedin.page');


       Route::get('twitter','SocialMediaController@twitter')->name('social.twitter');
       Route::get('twitter/callback','SocialMediaController@twitter_callback')->name('social.twitter.callback');
    });



    Route::group(['prefix'=>'setup-email'],function (){
        Route::post('create','ClientEmailController@create')->name('setup.client.email');
        Route::post('edit/{id}','ClientEmailController@edit')->name('setup.client.edit');
    });



    Route::post('/profile', [ 'uses' => 'DashboardController@post_user_profile',   'as' => 'post_profile' ])->middleware(['can:edit-profile']);

    Route::post('/sender_id','DashboardController@sender_id_submit')->name('user.sender-id.submit');

    Route::get('/sender_id/get','DashboardController@all_sender_ids')->name('user.sender-id.table');
    Route::get('/sender_id/approve/{id}','DashboardController@all_sender_ids')->name('user.sender-id.table.approve');
    Route::get('/sender_id/rejection/{id}','DashboardController@sender_id_reject')->name('user.sender-id.table.reject');

    Route::post('/update/sender_id/edit/{id}','DashboardController@sender_id_edit')->name('user.sender-id.edit');
    Route::get('/update/sender_id/destroy/{id}','DashboardController@sender_id_destroy')->name('user.sender-id.destroy');


    Route::group(['prefix'=>'admin-company-email'],function (){
       Route::get('index','ClientEmailController@index')->name('admin.company.email.index');
       Route::get('single/{id}','ClientEmailController@single_client_mail')->name('admin.company.email.single');
       Route::get('approve/{id}','ClientEmailController@approve')->name('admin.company.email.single.approve');
       Route::get('reject/{id}','ClientEmailController@reject')->name('admin.company.email.single.reject');
    });


    /*
    |--------------------------------------------------------------------------
    | Credit History Route
    |--------------------------------------------------------------------------
    */
    Route::get('/credit-history', [ 'uses' => 'DashboardController@get_credit_history', 'as' => 'credit_history'  ])->middleware(['can:view-report-credit-history']);

    Route::get('/download-receipt/{id}', [ 'uses' => 'DashboardController@download_receipt', 'as' => 'download_receipt' ]);


    /*
    |--------------------------------------------------------------------------
    | User Settings Route
    |--------------------------------------------------------------------------
    */
    Route::get('/settings', [ 'uses' => 'DashboardController@get_user_settings', 'as' => 'settings'  ]);

    /*
    |--------------------------------------------------------------------------
    | User Billing Info Route
    |--------------------------------------------------------------------------
    */
    Route::get('/billing', [ 'uses' => 'DashboardController@get_user_billing', 'as' => 'billing' ]);


    /*
    |--------------------------------------------------------------------------
    | Send Single SMS Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-single-sms', [ 'uses' => 'SmsController@send_single_sms', 'as' => 'send_single_sms' ])->middleware(['can:send-sms-single']);


    Route::get('/add-new-sender-id/{panel}',function ($panel){
        session(['my_panel_value' => $panel]);   return redirect()->route('profile');  })->name('new-sender-id');

    Route::post('/send-single-sms', [ 'uses' => 'SmsController@post_send_single_sms', 'as' => 'post_send_single_sms'  ])->middleware(['can:send-sms-single']);


    /*
    |--------------------------------------------------------------------------
    | Send Single Voice Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-single-voice', [
        'uses' => 'voiceController@send_single_voice',
        'as' => 'send_single_voice'
    ])->middleware(['can:send-voice-single']);

    Route::post('/send-single-voice', [
        'uses' => 'voiceController@post_send_single_voice',
        'as' => 'post_send_single_voice'
    ])->middleware(['can:send-voice-single']);


    /*
    |--------------------------------------------------------------------------
    | Send Single Email Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-single-email', [
        'uses' => 'EmailController@send_single_email',
        'as' => 'send_single_email'
    ])->middleware(['can:send-email-single']);

    Route::post('/send-single-email', [
        'uses' => 'EmailController@post_send_single_email',
        'as' => 'post_send_single_email'
    ])->middleware(['can:send-email-single']);


    /*
    |--------------------------------------------------------------------------
    | Send Bulk SMS Route
    |--------------------------------------------------------------------------
    */
    Route::get('/note', function(){
        // return 'assdsd';
        $user = User::where('email', 'fostersnt@gmail.com')->get();
        dispatch(new CreditPurchaseJob('fostersnt@gmail.com', $user));
        // Mail::to('fostersnt@gmail.com')->send(new CreditPurchaseMail());
        dd('aaaaa');
    });
    Route::get('/send-bulk-sms', [
        'uses' => 'SmsController@send_bulk_sms',
        'as' => 'send_bulk_sms'
    ])->middleware(['can:send-sms-bulk']);

    Route::post('/send-bulk-sms', [
        'uses' => 'SmsController@post_send_bulk_sms',
        'as' => 'post_send_bulk_sms'
    ])->middleware(['can:send-sms-bulk']);

    Route::post('/save-sms', [
        'uses' => 'SmsController@post_save_sms',
        'as' => 'post_save_sms'
    ]);

    Route::post('/get-saved-sms', [
        'uses' => 'SmsController@get_saved_sms',
        'as' => 'get_saved_sms'
    ]);


    /*
|--------------------------------------------------------------------------
| Send Bulk Voice Route
|--------------------------------------------------------------------------
*/
    Route::get('/send-bulk-voice', [
        'uses' => 'voiceController@send_bulk_voice',
        'as' => 'send_bulk_voice'
    ])->middleware(['can:send-sms-bulk']);

    Route::post('/send-bulk-voice', [
        'uses' => 'voiceController@post_send_bulk_voice',
        'as' => 'post_send_bulk_voice'
    ])->middleware(['can:send-sms-bulk']);
    /*
    |--------------------------------------------------------------------------
    | Send Bulk Email Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-bulk-email', [
        'uses' => 'EmailController@send_bulk_email',
        'as' => 'send_bulk_email'
    ])->middleware(['can:send-email-bulk']);

    Route::post('/send-bulk-email', [
        'uses' => 'EmailController@post_send_bulk_email',
        'as' => 'post_send_bulk_sms'
    ])->middleware(['can:send-email-bulk']);

    Route::post('/save-email', [
        'uses' => 'EmailController@post_save_email',
        'as' => 'post_save_sms'
    ]);

    Route::post('/get-saved-email', [
        'uses' => 'EmailController@get_saved_email',
        'as' => 'get_saved_sms'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Send Personalised Bulk SMS Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-personalised-bulk-sms', [
        'uses' => 'SmsController@send_personalised_bulk_sms',
        'as' => 'send_personalised_bulk_sms'
    ])->middleware(['can:send-sms-bulk-perso']);

    Route::post('/send-personalised-bulk-sms', [
        'uses' => 'SmsController@post_send_personalised_bulk_sms',
        'as' => 'post_send_personalised_bulk_sms'
    ])->middleware(['can:send-sms-bulk-perso']);


    /*
    |--------------------------------------------------------------------------
    | Send Personalised Bulk Email Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-personalised-bulk-email', [
        'uses' => 'EmailController@send_personalised_bulk_email',
        'as' => 'send_personalised_bulk_email'
    ])->middleware(['can:send-email-bulk-perso']);

    Route::post('/send-personalised-bulk-email', [
        'uses' => 'EmailController@post_send_personalised_bulk_email',
        'as' => 'post_send_personalised_bulk_email'
    ])->middleware(['can:send-email-bulk-perso']);



    /*
    |--------------------------------------------------------------------------
    | Send Group SMS Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-group-sms', [ 'uses' => 'SmsController@send_group_sms', 'as' => 'send_group_sms' ])->middleware(['can:send-sms-group']);

    Route::post('/send-group-sms', [ 'uses' => 'SmsController@post_send_group_sms', 'as' => 'post_send_group_sms'])->middleware(['can:send-sms-group']);

    Route::get('/send-group-sms/{msisdn}/delete', [ 'uses' => 'SmsController@delete_contact_from_sms_group', 'as' => 'send_group_sms.delete_contact' ]);


    /*
    |--------------------------------------------------------------------------
    | Send Group Email Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-group-email', [
        'uses' => 'EmailController@send_group_email',
        'as' => 'send_group_email'
    ])->middleware(['can:send-email-group']);

    Route::post('/send-group-email', [
        'uses' => 'EmailController@post_send_group_email',
        'as' => 'post_send_group_email'
    ])->middleware(['can:send-email-group']);

    Route::get('/send-group-email/{msisdn}/delete', [
        'uses' => 'EmailController@delete_contact_from_email_group',
        'as' => 'send_group_email.delete_contact'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Send Personalised Group SMS Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-personalised-group-sms', [ 'uses' => 'SmsController@send_personalised_group_sms', 'as' => 'send_personalised_group_sms' ])->middleware(['can:send-sms-group-perso']);

    Route::post('/send-personalised-group-sms', [
        'uses' => 'SmsController@post_send_personalised_group_sms',
        'as' => 'post_send_personalised_group_sms'
    ])->middleware(['can:send-sms-group-perso']);

    Route::get('/send-group-sms/{msisdn}/delete', [
        'uses' => 'SmsController@delete_contact_from_sms_group',
        'as' => 'send_group_sms.delete_contact'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Send Personalised Group Email Route
    |--------------------------------------------------------------------------
    */
    Route::get('/send-personalised-group-email', [
        'uses' => 'EmailController@send_personalised_group_email',
        'as' => 'send_personalised_group_email'
    ])->middleware(['can:send-email-group-perso']);

    Route::post('/send-personalised-group-email', [
        'uses' => 'EmailController@post_send_personalised_group_email',
        'as' => 'post_send_personalised_group_email'
    ])->middleware(['can:send-email-group-perso']);

    Route::get('/send-group-email/{msisdn}/delete', [
        'uses' => 'EmailController@delete_contact_from_email_group',
        'as' => 'send_group_email.delete_contact'
    ]);



    /*
   |--------------------------------------------------------------------------
   | Create Email Template Route
   |--------------------------------------------------------------------------
   */

    Route::get('new-email-templates',[
        'uses' => 'EmailTemplateController@index',
        'as' => 'new_mail_template'
        ]);

    Route::post('create-email-templates',[
        'uses' => 'EmailTemplateController@create',
        'as' => 'create_new_mail_template'
    ]);

    Route::get('view-email-templates',[
        'uses' => 'EmailTemplateController@view',
        'as' => 'view_new_mail_template'
    ]);

    Route::get('{id}/see-email-templates',[
        'uses' => 'EmailTemplateController@see',
        'as' => 'see_new_mail_template'
    ]);

    Route::get('{id}/edit-email-templates',[
        'uses' => 'EmailTemplateController@edit',
        'as' => 'edit_new_mail_template'
    ]);


    Route::post('edit-email-templates',[
        'uses' => 'EmailTemplateController@send_edit',
        'as' => 'sendedit-email-template'
    ]);



    Route::get('{id}/delete-email-templates',[
        'uses' => 'EmailTemplateController@delete',
        'as' => 'delete_new_mail_template'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Address Book - Groups Route
    |--------------------------------------------------------------------------
    */
    Route::get('address-book/groups', [
        'uses' => 'AddressBookController@getAllGroup',
        'as' => 'addressbook.groups'
    ])->middleware(['can:manage-contacts']);

    ////// NEW GROUP
    Route::get('address-book/groups/new', [
        'uses' => 'AddressBookController@new_group',
        'as' => 'addressbook.groups.new_group'
    ])->middleware(['can:manage-contacts']);

    Route::post('address-book/groups/new', [
        'uses' => 'AddressBookController@post_group',
        'as' => 'addressbook.groups.post_group'
    ])->middleware(['can:manage-contacts']);

    ////// EDIT GROUP
    Route::get('address-book/groups/{id}/edit', [
        'uses' => 'AddressBookController@edit_group',
        'as' => 'addressbook.groups.edit_group'
    ])->middleware(['can:manage-contacts']);

    Route::put('address-book/groups/{id}/edit', [
        'uses' => 'AddressBookController@update_group',
        'as' => 'addressbook.groups.update_group'
    ])->middleware(['can:manage-contacts']);

    ///// DELETE GROUP
    Route::get('address-book/groups/{id}/delete', [
        'uses' => 'AddressBookController@delete_group',
        'as' => 'addressbook.groups.delete_group'
    ])->middleware(['can:manage-contacts']);


    /*
    |--------------------------------------------------------------------------
    | Address Book - Contacts Route
    |--------------------------------------------------------------------------
    */
    Route::match(['get','post'], 'address-book/{group_id}/contacts', [
        'uses' => 'AddressBookController@getAllContact',
        'as' => 'addressbook.contacts'
    ])->middleware(['can:manage-contacts']);

    ////// BULK UPLOAD CONTACT
    Route::get('address-book/{group_id}/contacts/bulk', [
        'uses' => 'AddressBookController@bulk_upload',
        'as' => 'addressbook.contacts.bulk_upload'
    ]);
    Route::post('address-book/{group_id}/contacts/bulk', [
        'uses' => 'AddressBookController@post_bulk_upload',
        'as' => 'addressbook.contacts.post_bulk_upload'
    ]);

    ////// NEW CONTACT
    Route::get('address-book/{group_id}/contacts/new', [
        'uses' => 'AddressBookController@new_contact',
        'as' => 'addressbook.contacts.new_contact'
    ]);

    Route::post('address-book/{group_id}/contacts/new', [
        'uses' => 'AddressBookController@post_contact',
        'as' => 'addressbook.contacts.post_contact'
    ]);

    ////// EDIT CONTACT
    Route::get('address-book/{group_id}/contacts/{id}/edit', [
        'uses' => 'AddressBookController@edit_contact',
        'as' => 'addressbook.contacts.edit_contact'
    ]);

    Route::put('address-book/{group_id}/contacts/{id}/edit', [
        'uses' => 'AddressBookController@update_contact',
        'as' => 'addressbook.contacts.update_contact'
    ]);

    ///// DELETE CONTACT
    Route::get('address-book/{group_id}/contacts/{id}/delete', [
        'uses' => 'AddressBookController@delete_contact',
        'as' => 'addressbook.contacts.delete_contact'
    ]);



    /*
    |--------------------------------------------------------------------------
    | Report - SMS Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/sms-log-24h', [
        'uses' => 'ReportController@get_sms_log_24h',
        'as' => 'report_get_sms_log_24h'
    ])->middleware(['can:view-report-24h-sms']);

    /*
    |--------------------------------------------------------------------------
    | Report - Stanbic OTP
    |--------------------------------------------------------------------------
    */
    Route::get('/report/stanbic/otp', [
        'uses' => 'ReportController@get_stanbic_otp_report',
        'as' => 'report_otp'
    ])->middleware(['can:view-report-otp']);

    /*
    |--------------------------------------------------------------------------
    | Report - Stanbic e-banking
    |--------------------------------------------------------------------------
    */
    Route::get('/report/stanbic/ebanking', [
        'uses' => 'ReportController@get_stanbic_ebanking_report',
        'as' => 'report_ebanking'
    ]);

    /*
    |--------------------------------------------------------------------------
    | Report - Stanbic Transactional
    |--------------------------------------------------------------------------
    */
    Route::get('/report/stanbic/transactional', [
        'uses' => 'ReportController@get_stanbic_transactional_report',
        'as' => 'report_transactional'
    ])->middleware(['can:view-report-transactional']);

    /*
    |--------------------------------------------------------------------------
    | Report - Stanbic BulkSMS
    |--------------------------------------------------------------------------
    */
    Route::get('/report/stanbic/bulksms', [
        'uses' => 'ReportController@get_stanbic_bulksms_report',
        'as' => 'report_bulksms'
    ])->middleware(['can:view-report-bulksms']);

    /*
    |--------------------------------------------------------------------------
    | Report - Undelivered SMS Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/report_get_sms_undelivered_log_24h', [
        'uses' => 'ReportController@get_sms_undelivered_log_24h',
        'as' => 'report_get_sms_undelivered_log_24h'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Report - Delivered SMS Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/report_get_sms_delivered_log_24h', [
        'uses' => 'ReportController@get_sms_delivered_log_24h',
        'as' => 'report_get_sms_delivered_log_24h'
    ]);

    /*
    |--------------------------------------------------------------------------
    | Report - Expired SMS Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/report_get_sms_expired_log_24h', [
        'uses' => 'ReportController@get_sms_expired_log_24h',
        'as' => 'report_get_sms_expired_log_24h'
    ]);


    /*
    |--------------------------------------------------------------------------
    | Report - Email Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/email-log-24h', [
        'uses' => 'ReportController@get_email_log_24h',
        'as' => 'report_get_email_log_24h'
    ])->middleware(['can:view-report-24h-email']);
    Route::get('/report/email-log-24h-sent', [
        'uses' => 'ReportController@get_email_log_24h_sent',
        'as' => 'report_get_email_log_24h_sent'
    ])->middleware(['can:view-report-24h-email']);
    Route::get('/report/email-log-24h-delivered', [
        'uses' => 'ReportController@get_email_log_24h_delivered',
        'as' => 'report_get_email_log_24h_delivered'
    ])->middleware(['can:view-report-24h-email']);
    Route::get('/report/email-log-24h-failed', [
        'uses' => 'ReportController@get_email_log_24h_failed',
        'as' => 'report_get_email_log_24h_failed'
    ])->middleware(['can:view-report-24h-email']);
    Route::get('/report/email-log-24h-rejected', [
        'uses' => 'ReportController@get_email_log_24h_rejected',
        'as' => 'report_get_email_log_24h_rejected'
    ])->middleware(['can:view-report-24h-email']);



    /*
    |--------------------------------------------------------------------------
    | Report - Email Log 24h - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/voice-log-24h', [
        'uses' => 'ReportController@get_voice_log_24h',
        'as' => 'report_get_voice_log_24h'
    ])->middleware(['can:view-report-24h-email']);

    /*
    |--------------------------------------------------------------------------
    | Report - Specify Period - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/specify-period', [
        'uses' => 'ReportController@get_specify_period',
        'as' => 'report_get_specify_period'
    ])->middleware(['can:view-report-specific-sms']);

    /*
    |--------------------------------------------------------------------------
    | Report - Specify Period - Route
    |--------------------------------------------------------------------------
    */
    Route::get('/report/specify-period-email', [
        'uses' => 'ReportController@get_specify_period_email',
        'as' => 'report_get_specify_period_email'
    ])->middleware(['can:view-report-specific-email']);


    /*
    |--------------------------------------------------------------------------
    | Report - 2ways report
    |--------------------------------------------------------------------------
    */
    Route::get('/report/2way', [
        'uses' => 'ReportController@_2way',
        'as' => 'report_get_2way'
    ])->middleware(['can:view-report-2way-msg']);

    /*
    |--------------------------------------------------------------------------
    | Reporting
    |--------------------------------------------------------------------------
    */
    Route::match(['get','post'], '/report/reporting', [
        'uses' => 'ReportController@reporting',
        'as' => 'report_get_reporting'
    ])->middleware(['can:view-report-reporting']);

    Route::get('/report/new-report', [
        'uses' => 'ReportController@new_report',
        'as' => 'report_new_report'
    ]);
    Route::post('/report/new-report', [
        'uses' => 'ReportController@post_report',
        'as' => 'report_post_report'
    ]);

    Route::get('/report/reporting/{id}/delete', [
        'uses' => 'ReportController@delete_report',
        'as' => 'report_delete_report'
    ]);

    Route::get('/report/reporting/delete-selection', [
        'uses' => 'ReportController@delete_selection',
        'as' => 'report_delete_selection_report'
    ]);

    Route::get('/report/reporting/{id}/download', [
        'uses' => 'ReportController@download_report',
        'as' => 'report_download_report'
    ]);

    Route::get('/report/reporting/{id}/cancel', [
        'uses' => 'ReportController@cancel_report',
        'as' => 'report_cancel_report'
    ]);

    /*
    |--------------------------------------------------------------------------
    | Campaigns
    |--------------------------------------------------------------------------
    */
    Route::get('/campaigns/dashboard', [
        'uses' => 'CampaignController@view_campaigns',
        'as' => 'campaigns.dashboard'
    ])->middleware(['can:view-campaign-bulk-sms']);

    //email
    Route::get('/campaigns/email-dashboard', [
        'uses' => 'CampaignController@view_email_campaigns',
        'as' => 'campaigns.email.dashboard'
    ])->middleware(['can:view-campaign-bulk-email']);

    Route::get('/campaigns/api', [
        'uses' => 'CampaignController@view_api_campaigns',
        'as' => 'campaigns.api'
    ])->middleware(['api', 'can:view-campaign-api-sms']);

    //email
    Route::get('/campaigns/email-api', [
        'uses' => 'CampaignController@view_email_api_campaigns',
        'as' => 'campaigns.email.api'
    ])->middleware(['api','can:view-campaign-api-email']);

    Route::get('/campaigns/{id}/cancel', [
        'uses' => 'CampaignController@cancel_campaigns',
        'as' => 'campaigns.cancel_campaigns'
    ]);

    //email
    Route::get('/campaigns/{id}/cancel-email', [
        'uses' => 'CampaignController@cancel_email_campaigns',
        'as' => 'campaigns.cancel_email_campaigns'
    ]);

    Route::get('/campaigns/{id}/send-now', [
        'uses' => 'CampaignController@send_campaign_now',
        'as' => 'campaigns.send_campaign_now'
    ]);

    //email
    Route::get('/campaigns/{id}/send-email-now', [
        'uses' => 'CampaignController@send_email_campaign_now',
        'as' => 'campaigns.send_email_campaign_now'
    ]);

    Route::get('/campaigns/{id}/edit', [
        'uses' => 'CampaignController@edit_campaign',
        'as' => 'campaigns.edit_campaign'
    ]);

    //email
    Route::get('/campaigns/{id}/edit-email', [
        'uses' => 'CampaignController@edit_email_campaign',
        'as' => 'campaigns.edit_email_campaign'
    ]);

    Route::post('/campaigns/{id}/edit', [
        'uses' => 'CampaignController@update_campaign',
        'as' => 'campaigns.update_campaign'
    ]);

    Route::get('/campaigns/{id}/delete', [
        'uses' => 'CampaignController@delete_campaigns',
        'as' => 'campaigns.delete_campaigns'
    ]);

    //email
    Route::get('/campaigns/{id}/delete-email', [
        'uses' => 'CampaignController@delete_email_campaigns',
        'as' => 'campaigns.delete_email_campaigns'
    ]);

    /*
    |--------------------------------------------------------------------------
    | Report Comparison
    |--------------------------------------------------------------------------
    */
    Route::get('/report/comparison', [
        'uses' => 'ReportController@comparison',
        'as' => 'report_get_comparison'
    ])->middleware(['can:view-report-comparison']);

    Route::post('/report/comparison', [
        'uses' => 'ReportController@post_comparison',
        'as' => 'report_post_comparison'
    ])->middleware(['can:view-report-comparison']);

    /*
    |--------------------------------------------------------------------------
    | Invoice Report
    |--------------------------------------------------------------------------
    */
    Route::match(['get', 'post'],'/report/invoice', [
        'uses' => 'ReportController@invoice',
        'as' => 'report_get_invoice'
    ])->middleware(['can:view-report-invoice']);

//    Route::post('/report/invoice', [
//        'uses' => 'ReportController@post_invoice',
//        'as' => 'report_post_invoice'
//    ]);


    /*
    |--------------------------------------------------------------------------
    | Campaign Analytics Route
    |--------------------------------------------------------------------------
    */
    Route::get('/campaigns/{id}/analytics', [
        'uses' => 'CampaignController@get_campaign_analitics',
        'as' => 'canalytics'
    ]);

    //email
    Route::get('/campaigns/{id}/analytics-email', [
        'uses' => 'CampaignController@get_email_campaign_analitics',
        'as' => 'canalytics.email'
    ]);


    Route::get('/campaigns/{date}/analytics_api', [
        'uses' => 'CampaignController@get_campaign_analitics_api',
        'as' => 'canalytics_api'
    ])->middleware('api');

    //email
    Route::get('/campaigns/{date}/analytics_email_api', [
        'uses' => 'CampaignController@get_campaign_analitics_email_api',
        'as' => 'canalytics_email_api'
    ])->middleware('api');


    /*
    |--------------------------------------------------------------------------
    | API Routes
    |--------------------------------------------------------------------------
    */
    Route::group(['prefix' => 'api', 'middleware' => 'api'], function () {

        //sms
        Route::post('get-traffic-performance-data', [
            'uses' => 'DashboardController@get_traffic_performance_data'
        ]);

        //email
        Route::post('get-email-traffic-performance', [
            'uses' => 'DashboardController@get_email_traffic_performance'
        ]);

        //sms
        Route::post('get-user-log-summary', [
            'uses' => 'DashboardController@get_user_log_summary'
        ]);

        //email
        Route::post('get-email-log-summary', [
            'uses' => 'DashboardController@get_email_log_summary'
        ]);

        Route::post('get-performance-for-comparison', [
            'uses' => 'DashboardController@get_performance_for_comparison'
        ]);
    });

});


/*
|--------------------------------------------------------------------------
| Admin Routes
|--------------------------------------------------------------------------
*/
Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function () {

    Route::get('/', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'admin.main_route'
    ]);

    Route::get('/home', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'admin.home'
    ]);

    Route::get('/report/registration', [
        'uses' => 'UserController@registration_report',
        'as' => 'admin.report.registration'
    ]);

    Route::get('/report/sms-report', [
        'uses' => 'ReportController@sms_report',
        'as' => 'admin.report.sms_report'
    ]);

    //admin top clients
    Route::match(['get', 'post'], '/reports/top-clients', [
        'uses' => 'UserController@top_clients',
        'as' => 'admin.report.top_clients'
    ]);



    /*
    |--------------------------------------------------------------------------
    | Unprotected Admin route for Guess only
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['guest.admin']], function () {

        /*
        |--------------------------------------------------------------------------
        | Route for Admin Login
        |--------------------------------------------------------------------------
        */
        Route::get('/login', function () {
            return view('admin.layouts.login');
        })->name('admin.login');

        Route::post('/login', [
            'uses' => 'LoginController@postLogin',
            'as' => 'admin.post_login'
        ]);
    });

    /*
    |--------------------------------------------------------------------------
    | Admin Protected Route Group
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['auth.admin']], function () {
        /*
        |--------------------------------------------------------------------------
        | Admin Dashboard Route
        |--------------------------------------------------------------------------
        */
        Route::get('/dashboard', [
            'uses' => 'DashboardController@index',
            'as' => 'admin.app'
        ]);

        Route::group(['prefix'=>'root'],function (){

            Route::group(['prefix'=>'users'],function (){
                    Route::get('index','AdminUsersController@index')->name('admin.root.users');
                    Route::any('create','AdminUsersController@create')->name('admin.root.users.create');
                    Route::any('edit/{id}','AdminUsersController@edit')->name('admin.root.users.edit');
                    Route::any('destroy','AdminUsersController@destroy')->name('admin.root.users.destroy');
            });


            Route::group(['prefix'=>'company'],function (){
                Route::get('index','AdminCompanyController@index')->name('admin.root.company');
                Route::any('create','AdminCompanyController@create')->name('admin.root.company.create');
                Route::any('edit/{id}','AdminCompanyController@edit')->name('admin.root.company.edit');
                Route::any('user/{id}','AdminCompanyController@user')->name('admin.root.company.user');
                Route::any('1st-approval/{id}','AdminCompanyController@approval')->name('admin.root.company.approval.first');
                Route::any('rejection/{id}','AdminCompanyController@rejection')->name('admin.root.company.rejection');
                Route::any('destroy/{id}','AdminCompanyController@destroy')->name('admin.root.company.destroy');
                Route::any('2nd-approval/{id}','AdminCompanyController@second_approval')->name('admin.root.company.approval.second');

                Route::group(['prefix'=>'user-sender-id'],function (){
                    Route::get('{id}','AdminCompanyController@user_sender_id')->name('admin.root.company.sender-id');
                });

            });



        });

        Route::get('/financial-dashboard', [
            'uses' => 'DashboardController@financial_index',
            'as' => 'admin.financial.app'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Download Invoice Route
        |--------------------------------------------------------------------------
        */
        Route::get('/download/invoice', [
            'uses' => 'ReportController@download_invoice',
            'as' => 'admin.download.invoice'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin Logout Route
        |--------------------------------------------------------------------------
        */
        Route::get('/logout', [
            'uses' => 'DashboardController@logout',
            'as' => 'admin.logout'
        ]);



        /** Filtering of reseller **/
        Route::group(['prefix'=>'filtering'],function (){

            Route::get('/','FilteringController@index')->name('admin.filtering.index');
            Route::any('create','FilteringController@create')->name('admin.filtering.create');

        });

        Route::group(['prefix'=>'social'],function (){
            Route::any('pricing','SpricingController@index')->name('admin.social-media.pricing');
        });



        Route::group(['prefix'=>'sms-price-setup'],function (){
            Route::any('pricing','SpricingController@sms_price_index')->name('admin.sms.price.setup.index');
            Route::any('pricing/{id}','SpricingController@sms_price_edit')->name('admin.sms.price.setup.edit');
        });




        /*
        |--------------------------------------------------------------------------
        | Admin - Credit History Route
        |--------------------------------------------------------------------------
        */
        Route::get('/credit-history', [

            'uses' => 'DashboardController@view_clients_for_credit_history',
            'as' => 'admin.clients_credit_history'

        ]);

        Route::get('/credit-history/{client_id}', [
            'uses' => 'DashboardController@get_credit_history',
            'as' => 'admin.credit_history'
        ]);

        Route::get('/download-receipt/{client_id}/{id}', [
            'uses' => 'DashboardController@download_receipt',
            'as' => 'admin.download_receipt'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Invoice Report
        |--------------------------------------------------------------------------
        */
        Route::get('/report/invoice', [
            'uses' => 'DashboardController@view_clients_for_invoice',
            'as' => 'admin.clients_report_get_invoice'
        ]);
        Route::match(['get', 'post'],'/report/invoice/{id}', [
            'uses' => 'ReportController@invoice',
            'as' => 'admin.report_get_invoice'
        ]);



        Route::get('/generate/invoice', [
            'uses' => 'ReportController@generate_invoice_form',
            'as' => 'admin.generate_invoice_form'
        ]);

        Route::post('/generate/invoice', [
            'uses' => 'ReportController@generate_invoice',
        ]);

        // SETTINGS => cost price
        Route::get('/setting/network-cost-price', [
            'uses' => 'SettingController@network_cost_price_list',
            'as' => 'admin.setting.cost.price.list'
        ]);
        Route::match(['get', 'post'], '/setting/network-cost-price/{id}/edit', [
            'uses' => 'SettingController@network_cost_price_edit',
            'as' => 'admin.setting.cost.price.edit'
        ]);
        Route::match(['get', 'post'], '/setting/network-cost-price/{id}/delete', [
            'uses' => 'SettingController@network_cost_price_del',
            'as' => 'admin.setting.cost.price.del'
        ]);
        Route::get('/setting/get-country-networks/{id}', [
            'uses' => 'SettingController@get_networks_by_country'
        ]);



        /*
        |--------------------------------------------------------------------------
        | Admin - Comparison Report Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/comparison', [
            'uses' => 'ReportController@get_comparison_report',
            'as' => 'admin.reports.comparison'
        ]);

        Route::post('/reports/comparison', [
            'uses' => 'ReportController@post_comparison_report',
            'as' => 'admin.reports.post_comparison'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Report daily Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/daily', [
            'uses' => 'ReportController@get_reports_daily',
            'as' => 'admin.reports.daily'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Report daily per user Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/daily/{username}', [
            'uses' => 'ReportController@get_reports_daily_for_user',
            'as' => 'admin.reports.daily.user'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Report specific-date Route
        |--------------------------------------------------------------------------
        */
        Route::match(['get', 'post'], '/reports/specific', [
            'uses' => 'ReportController@get_reports_specific',
            'as' => 'admin.reports.specific'
        ]);

        Route::get('/reports/specific/{user}', [
            'uses' => 'ReportController@get_reports_specific_user',
            'as' => 'admin.reports.specific.usr'
        ]);


        // ADMIN CAMPAIGNS
        Route::get('/campaigns/{user}/{id}/analytics', [
            'uses' => 'CampaignController@get_campaign_analitics',
            'as' => 'admin.canalytics'
        ]);
        Route::get('/campaigns/api/{user}/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'admin.canalytics_api'
        ])->middleware('api');

        Route::get('/campaigns/dashboard', [
            'uses' => 'CampaignController@view_clients',
            'as' => 'admin.campaigns.dashboard'
        ]);

        Route::get('/campaigns/daily/dashboard', [
            'uses' => 'CampaignController@view_clients_daily',
            'as' => 'admin.daily.campaigns.dashboard'
        ]);

        Route::get('/campaigns/{id}/campaigns', [
            'uses' => 'CampaignController@view_campaigns',
            'as' => 'admin.view.campaigns'
        ]);

        Route::get('/campaigns/api/{id}/campaigns', [
            'uses' => 'CampaignController@view_api_campaigns',
            'as' => 'admin.view.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/api/daily/{id}/campaigns', [
            'uses' => 'CampaignController@view_api_campaigns_daily',
            'as' => 'admin.view.campaigns.api.daily'
        ])->middleware('api');

        Route::get('/campaigns/api/daily', [
            'uses' => 'CampaignController@view_clients_api_daily',
            'as' => 'admin.daily.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/daily/{id}/campaigns', [
            'uses' => 'CampaignController@view_daily_campaigns',
            'as' => 'admin.daily.view.campaigns'
        ]);

        Route::get('/campaigns/api', [
            'uses' => 'CampaignController@view_clients_api',
            'as' => 'admin.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/api/daily/{user}/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'admin.daily.canalytics_api'
        ])->middleware('api');

        Route::get('/campaigns/{id}/send-now', [
            'uses' => 'CampaignController@send_campaign_now',
            'as' => 'admin.campaigns.send_campaign_now'
        ]);

        Route::get('/campaigns/{id}/delete', [
            'uses' => 'CampaignController@delete_campaigns',
            'as' => 'admin.campaigns.delete_campaigns'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Users Route
        |--------------------------------------------------------------------------
        */
        Route::get('/users', [
            'uses' => 'UserController@index',
            'as' => 'admin.users'
        ]);

        ////// NEW USER
        Route::get('/users/new', [
            'uses' => 'UserController@new_user',
            'as' => 'admin.users.new_user'
        ]);
        Route::post('get-currency-abbr','UserController@get_currency_abbr')->name('admin.get_currency_abbr');

        Route::post('/users/new', [
            'uses' => 'UserController@post_new_user',
            'as' => 'admin.users.post_new_user'
        ]);

        ////// EDIT USER
        Route::get('/users/{id}/edit', [
            'uses' => 'UserController@edit_user',
            'as' => 'admin.users.edit_user'
        ]);


        Route::any('/users/sender_id/{id}/update','UserController@update_user_sender_id')->name('admin.users.sender_id.update');

        Route::put('/users/{id}/edit', [
            'uses' => 'UserController@update_user',
            'as' => 'admin.users.update_user'
        ]);

        ///// DELETE USER
        Route::get('/users/{id}/delete', [
            'uses' => 'UserController@delete_user',
            'as' => 'admin.users.delete_user'
        ]);

        ///// DELETE USER
        Route::get('/users/{id}/lock', [
            'uses' => 'UserController@lock_user',
            'as' => 'admin.users.lock_user'
        ]);

        ///// USER PAYMENT
        Route::get('/users/{id}/payments', [
            'uses' => 'UserController@user_payments',
            'as' => 'admin.users.payments'
        ]);

        ///// MAKE NEW PAYMENT FOR USER
        Route::get('/users/{id}/payments/new', [
            'uses' => 'UserController@new_user_payment',
            'as' => 'admin.users.new_user_payment'
        ]);
        Route::post('/users/{id}/payments/new', [
            'uses' => 'UserController@post_user_payment',
            'as' => 'reseller.users.post_user_payment'
        ]);

        ///// USER NETWORKS
        Route::get('/users/{user_id}/networks', [
            'uses' => 'UserController@user_networks',
            'as' => 'admin.users.networks'
        ]);
        Route::get('setting/esme/{username}/networks', [
            'uses' => 'SettingController@esme_networks',
            'as' => 'admin.setting.esme.networks'
        ]);

        ///// MAKE NEW PAYMENT FOR USER
        Route::get('/users/{user_id}/networks/{id}/edit', [
            'uses' => 'UserController@edit_user_network',
            'as' => 'admin.users.edit_user_network'
        ]);
        //ESME
        Route::get('setting/esme/{username}/networks/{id}/edit', [
            'uses' => 'SettingController@edit_esme_network',
            'as' => 'admin.setting.esme.edit_user_network'
        ]);

        Route::put('/users/{user_id}/networks/{id}/edit', [
            'uses' => 'UserController@update_user_network',
            'as' => 'admin.users.update_user_network'
        ]);
        //ESME
        Route::put('/setting/esme/{username}/networks/{id}/edit', [
            'uses' => 'SettingController@update_esme_network',
            'as' => 'admin.setting.esme.update_user_network'
        ]);

        Route::get('/mark_payment_as_paid/{id}', [
            'uses' => 'UserController@mark_payment_as_paid',
            'as' => 'admin.mark_payment_as_paid'
        ]);

        /*
        |--------------------------------------------------------------------------
        | admin - Operational Settings
        |--------------------------------------------------------------------------
        */
        Route::match(['get', 'post'], '/setting/operational-setting', [
            'uses' => 'SettingController@operational_setting',
            'as' => 'admin.setting.operational'
        ]);

        //ESME PRICE
        Route::get('/setting/esme/index', [
            'uses' => 'SettingController@get_esme_list',
            'as' => 'admin.setting.esme.list'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Set Global Pricing - Country
        |--------------------------------------------------------------------------
        */
        //GET COUNTRIES
        Route::get('/setting/countries', [
            'uses' => 'SettingController@get_setting_countries',
            'as' => 'admin.setting.countries'
        ]);

        //NEW COUNTRY
        Route::get('/setting/countries/new', [
            'uses' => 'SettingController@new_country',
            'as' => 'admin.setting.countries.new'
        ]);
        Route::post('/setting/countries/new', [
            'uses' => 'SettingController@post_country',
            'as' => 'admin.setting.countries.post_country'
        ]);

        //EDIT COUNTRY
        Route::get('/setting/countries/{id}/edit', [
            'uses' => 'SettingController@edit_country',
            'as' => 'admin.setting.countries.edit'
        ]);
        Route::put('/setting/countries/{id}/edit', [
            'uses' => 'SettingController@update_country',
            'as' => 'admin.setting.countries.update_country'
        ]);

        //DELETE COUNTRY
        Route::get('/setting/countries/{id}/delete', [
            'uses' => 'SettingController@delete_country',
            'as' => 'admin.setting.countries.delete'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Admin - Currency
        |--------------------------------------------------------------------------
        */
        //GET CURRENCIES
        Route::get('/setting/currencies', [
            'uses' => 'SettingController@get_setting_currencies',
            'as' => 'admin.setting.currencies'
        ]);

        //NEW CURRENCY
        Route::get('/setting/currencies/new', [
            'uses' => 'SettingController@new_currency',
            'as' => 'admin.setting.currencies.new'
        ]);
        Route::post('/setting/currencies/new', [
            'uses' => 'SettingController@post_currency',
            'as' => 'admin.setting.currencies.post_currency'
        ]);

        //EDIT CURRENCY
        Route::get('/setting/currencies/{id}/edit', [
            'uses' => 'SettingController@edit_currency',
            'as' => 'admin.setting.currencies.edit'
        ]);
        Route::put('/setting/currencies/{id}/edit', [
            'uses' => 'SettingController@update_currency',
            'as' => 'admin.setting.currencies.update_currency'
        ]);

        //DELETE CURRENCY
        Route::get('/setting/currencies/{id}/delete', [
            'uses' => 'SettingController@delete_currency',
            'as' => 'admin.setting.currencies.delete'
        ]);


        /*
        |--------------------------------------------------------------------------
        | Admin - Set Global Pricing - Networks
        |--------------------------------------------------------------------------
        */
        //GET COUNTRY NETWORKS
        Route::get('/setting/countries/{country_id}/networks', [
            'uses' => 'SettingController@get_country_network',
            'as' => 'admin.setting.countries.networks'
        ]);

        //NEW NETWORK
        Route::get('/setting/countries/{country_id}/networks/new', [
            'uses' => 'SettingController@new_country_network',
            'as' => 'admin.setting.countries.networks.new'
        ]);
        Route::post('/setting/countries/{country_id}/networks/new', [
            'uses' => 'SettingController@post_country_network',
            'as' => 'admin.setting.countries.networks.post'
        ]);

        //EDIT NETWORK
        Route::get('/setting/countries/{country_id}/networks/{id}/edit', [
            'uses' => 'SettingController@edit_country_network',
            'as' => 'admin.setting.countries.networks.edit'
        ]);
        Route::put('/setting/countries/{country_id}/networks/{id}/edit', [
            'uses' => 'SettingController@update_country_network',
            'as' => 'admin.setting.countries.networks.put'
        ]);

        //DELETE NETWORK
        Route::get('/setting/countries/{country_id}/networks/{id}/delete', [
            'uses' => 'SettingController@delete_country_network',
            'as' => 'admin.setting.countries.networks.delete'
        ]);

        /*
         * ADMIN FINANCIAL REPORTS
         */
        Route::group(['prefix' => '/reports/financial'], function () {
            /*
            |--------------------------------------------------------------------------
            | OPERATIONAL
            |--------------------------------------------------------------------------
            */
            Route::get('/operational-costs', [
                'uses' => 'ReportController@get_operational_costs',
                'as' => 'admin.reports.operational.costs'
            ]);
            Route::get('/operational-cost/{date}', [
                'uses' => 'ReportController@get_operational_cost',
                'as' => 'admin.reports.operational.cost'
            ]);

            /*
            |--------------------------------------------------------------------------
            | SALES
            |--------------------------------------------------------------------------
            */
            Route::get('/sales/{from?}/{to?}', [
                'uses' => 'ReportController@get_sales',
                'as' => 'admin.reports.sales'
            ]);
            /*
            |--------------------------------------------------------------------------
            | SALES BY DATE
            |--------------------------------------------------------------------------
            */
            Route::get('/sale/{date}', [
                'uses' => 'ReportController@get_sale',
                'as' => 'admin.reports.sale'
            ]);
            /*
            |--------------------------------------------------------------------------
            | PROFITABILITY
            |--------------------------------------------------------------------------
            */
            Route::get('/profitability/{from?}/{to?}', [
                'uses' => 'ReportController@get_profitability',
                'as' => 'admin.reports.profitability'
            ]);

            /*
            |--------------------------------------------------------------------------
            | COMPARE
            |--------------------------------------------------------------------------
            */
            Route::match(['get', 'post'], '/compare-sales', [
                'uses' => 'ReportController@compare_sales',
                'as' => 'admin.reports.sales.compare'
            ]);
        });

        // API
        Route::group(['prefix' => '/api', 'middleware' => 'api'], function () {
            Route::get('/get-resellers', ['uses' => 'ApiController@get_resellers', 'as' => 'adm.api.resellers']);
            Route::get('/get-reseller-clients/{id}', ['uses' => 'ApiController@get_reseller_clients', 'as' => 'adm.api.reseller.clients']);
            Route::get('/get-client-senders/{id}', ['uses' => 'ApiController@get_client_senders', 'as' => 'adm.api.client.senders']);
            Route::post('get-user-log-summary', ['uses' => 'DashboardController@get_user_log_summary']);
            Route::post('get-user-financial-summary', ['uses' => 'DashboardController@get_user_financial_summary']);
            Route::post('get-traffic-performance-data', ['uses' => 'DashboardController@get_traffic_performance_data']);
            Route::post('get-financial-data', [
                'uses' => 'DashboardController@get_financial_data'
            ]);
            Route::post('get-admin-data-user', [
                'uses' => 'DashboardController@get_admin_data_user'
            ]);
        });

        Route::post('api/get-admin-users', [
            'uses' => 'DashboardController@get_admin_users',
            'as' => 'admin.get_admin_users'
        ])->middleware('api');
        Route::post('api/get-users-for-invoice', [
            'uses' => 'DashboardController@get_users_for_invoice',
            'as' => 'admin.get_users_for_invoice'
        ])->middleware('api');
        Route::post('api/get-user-sender', [
            'uses' => 'DashboardController@get_user_senders',
            'as' => 'admin.get_user_senders'
        ])->middleware('api');
    });

});

/*
|--------------------------------------------------------------------------
| ESME Routes
|--------------------------------------------------------------------------
*/
Route::group(['prefix' => 'esme', 'namespace' => 'Esme'], function () {

    Route::get('/', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'esme.main_route'
    ]);

    Route::get('/home', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'esme.home'
    ]);

    /*
    |--------------------------------------------------------------------------
    | Unprotected ESME route for Guess only
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['guest.esme']], function () {

        /*
        |--------------------------------------------------------------------------
        | Route for ESME Login
        |--------------------------------------------------------------------------
        */
        Route::get('/login', function () {
            return view('esme.layouts.login');
        })->name('esme.login');

        Route::post('/login', [
            'uses' => 'LoginController@postLogin',
            'as' => 'esme.post_login'
        ]);
    });

    /*
    |--------------------------------------------------------------------------
    | ESME Protected Route Group
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['auth.esme']], function () {
        /*
        |--------------------------------------------------------------------------
        | ESME Dashboard Route
        |--------------------------------------------------------------------------
        */
        Route::get('/dashboard', [
            'uses' => 'DashboardController@index',
            'as' => 'esme.app'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Credit History Route
        |--------------------------------------------------------------------------
        */
        Route::get('/credit-history', [
            'uses' => 'DashboardController@get_credit_history',
            'as' => 'esme.credit_history'
        ]);

        Route::get('/download-receipt/{id}', [
            'uses' => 'DashboardController@download_receipt',
            'as' => 'esme.download_receipt'
        ]);


        /*
        |--------------------------------------------------------------------------
        | ESME - Send Single SMS Route
        |--------------------------------------------------------------------------
        */
        Route::get('/send-single-sms', [
            'uses' => 'SmsController@send_single_sms',
            'as' => 'esme.send_single_sms'
        ]);

        Route::post('/send-single-sms', [
            'uses' => 'SmsController@post_send_single_sms',
            'as' => 'esme.post_send_single_sms'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME - Send Bulk SMS Route
        |--------------------------------------------------------------------------
        */
        Route::get('/send-bulk-sms', [
            'uses' => 'SmsController@send_bulk_sms',
            'as' => 'esme.send_bulk_sms'
        ]);

        Route::post('/send-bulk-sms', [
            'uses' => 'SmsController@post_send_bulk_sms',
            'as' => 'esme.post_send_bulk_sms'
        ]);


        /*
        |--------------------------------------------------------------------------
        | ESME - Send Personalised Bulk SMS Route
        |--------------------------------------------------------------------------
        */
        Route::get('/send-personalised-bulk-sms', [
            'uses' => 'SmsController@send_personalised_bulk_sms',
            'as' => 'esme.send_personalised_bulk_sms'
        ]);

        Route::post('/send-personalised-bulk-sms', [
            'uses' => 'SmsController@post_send_personalised_bulk_sms',
            'as' => 'esme.post_send_personalised_bulk_sms'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME - Send Group SMS Route
        |--------------------------------------------------------------------------
        */
        Route::get('/send-group-sms', [
            'uses' => 'SmsController@send_group_sms',
            'as' => 'esme.send_group_sms'
        ]);

        Route::post('/send-group-sms', [
            'uses' => 'SmsController@post_send_group_sms',
            'as' => 'esme.post_send_group_sms'
        ]);

        Route::get('/send-group-sms/{msisdn}/delete', [
            'uses' => 'SmsController@delete_contact_from_sms_group',
            'as' => 'esme.send_group_sms.delete_contact'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME - Send Personalised Group SMS Route
        |--------------------------------------------------------------------------
        */
        Route::get('/send-personalised-group-sms', [
            'uses' => 'SmsController@send_personalised_group_sms',
            'as' => 'esme.send_personalised_group_sms'
        ]);

        Route::post('/send-personalised-group-sms', [
            'uses' => 'SmsController@post_send_personalised_group_sms',
            'as' => 'esme.post_send_personalised_group_sms'
        ]);

        Route::get('/send-group-sms/{msisdn}/delete', [
            'uses' => 'SmsController@delete_contact_from_sms_group',
            'as' => 'esme.send_group_sms.delete_contact'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME - Address Book - Groups Route
        |--------------------------------------------------------------------------
        */
        Route::get('address-book/groups', [
            'uses' => 'AddressBookController@getAllGroup',
            'as' => 'esme.addressbook.groups'
        ]);

        ////// ESME NEW GROUP
        Route::get('address-book/groups/new', [
            'uses' => 'AddressBookController@new_group',
            'as' => 'esme.addressbook.groups.new_group'
        ]);

        Route::post('address-book/groups/new', [
            'uses' => 'AddressBookController@post_group',
            'as' => 'esme.addressbook.groups.post_group'
        ]);

        ////// ESME EDIT GROUP
        Route::get('address-book/groups/{id}/edit', [
            'uses' => 'AddressBookController@edit_group',
            'as' => 'esme.addressbook.groups.edit_group'
        ]);

        Route::put('address-book/groups/{id}/edit', [
            'uses' => 'AddressBookController@update_group',
            'as' => 'esme.addressbook.groups.update_group'
        ]);

        ///// ESME DELETE GROUP
        Route::get('address-book/groups/{id}/delete', [
            'uses' => 'AddressBookController@delete_group',
            'as' => 'esme.addressbook.groups.delete_group'
        ]);


        /*
        |--------------------------------------------------------------------------
        | ESME Address Book - Contacts Route
        |--------------------------------------------------------------------------
        */
        Route::match(['get','post'], 'address-book/{group_id}/contacts', [
            'uses' => 'AddressBookController@getAllContact',
            'as' => 'esme.addressbook.contacts'
        ]);

        ////// ESME BULK UPLOAD CONTACT
        Route::get('address-book/{group_id}/contacts/bulk', [
            'uses' => 'AddressBookController@bulk_upload',
            'as' => 'esme.addressbook.contacts.bulk_upload'
        ]);
        Route::post('address-book/{group_id}/contacts/bulk', [
            'uses' => 'AddressBookController@post_bulk_upload',
            'as' => 'esme.addressbook.contacts.post_bulk_upload'
        ]);

        ////// ESME NEW CONTACT
        Route::get('address-book/{group_id}/contacts/new', [
            'uses' => 'AddressBookController@new_contact',
            'as' => 'esme.addressbook.contacts.new_contact'
        ]);

        Route::post('address-book/{group_id}/contacts/new', [
            'uses' => 'AddressBookController@post_contact',
            'as' => 'esme.addressbook.contacts.post_contact'
        ]);

        ////// ESME EDIT CONTACT
        Route::get('address-book/{group_id}/contacts/{id}/edit', [
            'uses' => 'AddressBookController@edit_contact',
            'as' => 'esme.addressbook.contacts.edit_contact'
        ]);

        Route::put('address-book/{group_id}/contacts/{id}/edit', [
            'uses' => 'AddressBookController@update_contact',
            'as' => 'esme.addressbook.contacts.update_contact'
        ]);

        ///// ESME DELETE CONTACT
        Route::get('address-book/{group_id}/contacts/{id}/delete', [
            'uses' => 'AddressBookController@delete_contact',
            'as' => 'esme.addressbook.contacts.delete_contact'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME Report - SMS Log 24h - Route
        |--------------------------------------------------------------------------
        */
        Route::get('/report/sms-log-24h', [
            'uses' => 'ReportController@get_sms_log_24h',
            'as' => 'esme.report_get_sms_log_24h'
        ]);


        /*
        |--------------------------------------------------------------------------
        | ESME Report - Specify Period - Route
        |--------------------------------------------------------------------------
        */
        Route::get('/report/specify-period', [
            'uses' => 'ReportController@get_specify_period',
            'as' => 'esme.report_get_specify_period'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME Report - Comparison Report Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/comparison', [
            'uses' => 'ReportController@comparison',
            'as' => 'esme.reports.comparison'
        ]);

        Route::post('/reports/comparison', [
            'uses' => 'ReportController@post_comparison',
            'as' => 'esme.reports.post_comparison'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME Reporting
        |--------------------------------------------------------------------------
        */
        Route::match(['get','post'], '/report/reporting', [
            'uses' => 'ReportController@reporting',
            'as' => 'esme.report_get_reporting'
        ]);

        Route::get('/report/new-report', [
            'uses' => 'ReportController@new_report',
            'as' => 'esme.report_new_report'
        ]);
        Route::post('/report/new-report', [
            'uses' => 'ReportController@post_report',
            'as' => 'esme.report_post_report'
        ]);

        Route::get('/report/reporting/{id}/delete', [
            'uses' => 'ReportController@delete_report',
            'as' => 'esme.report_delete_report'
        ]);

        Route::get('/report/reporting/delete-selection', [
            'uses' => 'ReportController@delete_selection',
            'as' => 'esme.report_delete_selection_report'
        ]);

        Route::get('/report/reporting/{id}/download', [
            'uses' => 'ReportController@download_report',
            'as' => 'esme.report_download_report'
        ]);

        Route::get('/report/reporting/{id}/cancel', [
            'uses' => 'ReportController@cancel_report',
            'as' => 'esme.report_cancel_report'
        ]);



        /*
         * ESME FINANCIAL REPORTS
         */
        Route::group(['prefix' => '/reports/financial'], function () {
            /*
            |--------------------------------------------------------------------------
            | OPERATIONAL
            |--------------------------------------------------------------------------
            */
            Route::get('/operational-costs', [
                'uses' => 'ReportController@get_operational_costs',
                'as' => 'esme.reports.operational.costs'
            ]);
            Route::get('/operational-cost/{date}', [
                'uses' => 'ReportController@get_operational_cost',
                'as' => 'esme.reports.operational.cost'
            ]);

        });



        /*
        |--------------------------------------------------------------------------
        | ESME Campaigns
        |--------------------------------------------------------------------------
        */
        Route::get('/campaigns/dashboard', [
            'uses' => 'CampaignController@view_campaigns',
            'as' => 'esme.campaigns.dashboard'
        ]);

        Route::get('/campaigns/api', [
            'uses' => 'CampaignController@view_api_campaigns',
            'as' => 'esme.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/{id}/cancel', [
            'uses' => 'CampaignController@cancel_campaigns',
            'as' => 'esme.campaigns.cancel_campaigns'
        ]);

        Route::get('/campaigns/{id}/send-now', [
            'uses' => 'CampaignController@send_campaign_now',
            'as' => 'esme.campaigns.send_campaign_now'
        ]);

        Route::get('/campaigns/{id}/edit', [
            'uses' => 'CampaignController@edit_campaign',
            'as' => 'esme.campaigns.edit_campaign'
        ]);

        Route::post('/campaigns/{id}/edit', [
            'uses' => 'CampaignController@update_campaign',
            'as' => 'esme.campaigns.update_campaign'
        ]);

        Route::get('/campaigns/{id}/delete', [
            'uses' => 'CampaignController@delete_campaigns',
            'as' => 'esme.campaigns.delete_campaigns'
        ]);

        /*
        |--------------------------------------------------------------------------
        | ESME - Campaign Analytics Route
        |--------------------------------------------------------------------------
        */
        Route::get('/campaigns/{id}/analytics', [
            'uses' => 'CampaignController@get_campaign_analitics',
            'as' => 'esme.canalytics'
        ]);
        Route::get('/campaigns/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'esme.canalytics_api'
        ])->middleware('api');

        /*
        |--------------------------------------------------------------------------
        | ESME User Profile Route
        |--------------------------------------------------------------------------
        */
        Route::get('/profile', [
            'uses' => 'DashboardController@get_user_profile',
            'as' => 'esme.profile'
        ]);



        Route::post('/profile', [
            'uses' => 'DashboardController@post_user_profile',
            'as' => 'esme.post_profile'
        ]);


        /*
        |--------------------------------------------------------------------------
        | ESME Logout Route
        |--------------------------------------------------------------------------
        */
        Route::get('/logout', [
            'uses' => 'DashboardController@logout',
            'as' => 'esme.logout'
        ]);
    });

    /*
    |--------------------------------------------------------------------------
    | ESME API Routes
    |--------------------------------------------------------------------------
    */
    Route::group(['prefix' => 'api', 'middleware' => 'api'], function () {

        Route::post('get-traffic-performance-data', [
            'uses' => 'DashboardController@get_traffic_performance_data'
        ]);

        Route::post('get-user-log-summary', [
            'uses' => 'DashboardController@get_user_log_summary'
        ]);

        Route::post('get-performance-for-comparison', [
            'uses' => 'DashboardController@get_performance_for_comparison'
        ]);
    });

});


/*
|--------------------------------------------------------------------------
| Reseller Routes
|--------------------------------------------------------------------------
*/
Route::group(['prefix' => 'reseller', 'namespace' => 'Reseller'], function () {

    Route::get('/', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'reseller.main_route'
    ]);

    Route::get('/home', [
        'uses' => 'DashboardController@goto_main_route',
        'as' => 'reseller.home'
    ]);

    Route::get('/new-purchaseReseller', [
        'uses' => 'DashboardController@newPurchaseReseller',
        'as' => 'newPurchaseReseller'
    ]);

    Route::match(['get','post'],'BuyCreditReseller','DashboardController@buy_now_reseller')->name('buynowReseller');
    /*
    |--------------------------------------------------------------------------
    | Unprotected Reseller route for Guess only
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['guest.reseller']], function () {

        /*
        |--------------------------------------------------------------------------
        | Route for Reseller Login
        |--------------------------------------------------------------------------
        */

        Route::get('/login', [
            'uses' => 'LoginController@getLogin',
            'as' => 'reseller.login'
        ]);

        Route::post('/login', [
            'uses' => 'LoginController@postLogin',
            'as' => 'reseller.post_login'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Route for Reseller Sign up
        |--------------------------------------------------------------------------
        */
        Route::get('/register', function () {
            return view('reseller.layouts.register');
        })->name('reseller.register');

        Route::post('/register', [
            'uses' => 'LoginController@postRegistration',
            'as' => 'reseller.post_register'
        ]);
    });

    /*
    |--------------------------------------------------------------------------
    | Reseller Protected Route Group
    |--------------------------------------------------------------------------
    */
    Route::group(['middleware' => ['auth.reseller']], function () {
        /*
        |--------------------------------------------------------------------------
        | Reseller Dashboard Route
        |--------------------------------------------------------------------------
        */
        Route::get('/dashboard', [
            'uses' => 'DashboardController@index',
            'as' => 'reseller.app'
        ]);
        Route::get('/financial-dashboard', [
            'uses' => 'DashboardController@financial_index',
            'as' => 'reseller.financial.dashboard'
        ]);


        /*
        |--------------------------------------------------------------------------
        | Reseller Logout Route
        |--------------------------------------------------------------------------
        */
        Route::get('/logout', [
            'uses' => 'DashboardController@logout',
            'as' => 'reseller.logout'
        ]);



        /*
        |--------------------------------------------------------------------------
        | Reseller - Users Route
        |--------------------------------------------------------------------------
        */
        Route::get('/users', [
            'uses' => 'UserController@index',
            'as' => 'reseller.users'
        ]);

        ////// NEW USER
        Route::get('/users/new', [
            'uses' => 'UserController@new_user',
            'as' => 'reseller.users.new_user'
        ]);

        Route::post('/users/new', [
            'uses' => 'UserController@post_new_user',
            'as' => 'reseller.users.post_new_user'
        ]);

        ////// EDIT USER
        Route::get('/users/{id}/edit', [
            'uses' => 'UserController@edit_user',
            'as' => 'reseller.users.edit_user'
        ]);

        Route::put('/users/{id}/edit', [
            'uses' => 'UserController@update_user',
            'as' => 'reseller.users.update_user'
        ]);

        ///// DELETE USER
        Route::get('/users/{id}/delete', [
            'uses' => 'UserController@delete_user',
            'as' => 'reseller.users.delete_user'
        ]);

        ///// DELETE USER
        Route::get('/users/{id}/lock', [
            'uses' => 'UserController@lock_user',
            'as' => 'reseller.users.lock_user'
        ]);

        ///// USER PAYMENT
        Route::get('/users/{id}/payments', [
            'uses' => 'UserController@user_payments',
            'as' => 'reseller.users.payments'
        ]);

        ///// USER NETWORKS
        Route::get('/users/{user_id}/networks', [
            'uses' => 'UserController@user_networks',
            'as' => 'reseller.users.networks'
        ]);

        Route::get('/users/{user_id}/networks/{id}/edit', [
            'uses' => 'UserController@edit_user_network',
            'as' => 'reseller.users.edit_user_network'
        ]);

        Route::put('/users/{user_id}/networks/{id}/edit', [
            'uses' => 'UserController@update_user_network',
            'as' => 'reseller.users.update_user_network'
        ]);

        ///// MAKE NEW PAYMENT FOR USER
        Route::get('/users/{id}/payments/new', [
            'uses' => 'UserController@new_user_payment',
            'as' => 'reseller.users.new_user_payment'
        ]);

        Route::post('/users/{id}/payments/new', [
            'uses' => 'UserController@post_user_payment',
            'as' => 'reseller.users.post_user_payment'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller User Profile Route
        |--------------------------------------------------------------------------
        */
        Route::get('/profile', [
            'uses' => 'DashboardController@get_user_profile',
            'as' => 'reseller.profile'
        ]);

        Route::post('/profile', [
            'uses' => 'DashboardController@post_user_profile',
            'as' => 'reseller.post_profile'
        ]);

        Route::get('/mark_payment_as_paid/{id}', [   'uses' => 'UserController@mark_payment_as_paid', 'as' => 'reseller.mark_payment_as_paid' ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Credit History Route
        |--------------------------------------------------------------------------
        */
        Route::get('/credit-history', [
            'uses' => 'DashboardController@view_clients_for_credit_history',
            'as' => 'reseller.clients_credit_history'
        ]);
        Route::get('/credit-history/{client_id}', [
            'uses' => 'DashboardController@get_credit_history',
            'as' => 'reseller.credit_history'
        ]);

        Route::get('/download-receipt/{client_id}/{id}', [
            'uses' => 'DashboardController@download_receipt',
            'as' => 'reseller.download_receipt'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Invoice Report
        |--------------------------------------------------------------------------
        */
        Route::get('/report/invoice', [
            'uses' => 'DashboardController@view_clients_for_invoice',
            'as' => 'reseller.clients_report_get_invoice'
        ]);
        Route::match(['get', 'post'],'/report/invoice/{id}', [
            'uses' => 'ReportController@invoice',
            'as' => 'reseller.report_get_invoice'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Report daily Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/daily', [
            'uses' => 'ReportController@get_reports_daily',
            'as' => 'reseller.reports.daily'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Report specific-date Route
        |--------------------------------------------------------------------------
        */
        Route::match(['get', 'post'], '/reports/specific', [
            'uses' => 'ReportController@get_reports_specific',
            'as' => 'reseller.reports.specific'
        ]);

        Route::get('/reports/specific/{user}', [
            'uses' => 'ReportController@get_reports_specific_user',
            'as' => 'reseller.reports.specific.usr'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Report daily per user Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/daily/{username}', [
            'uses' => 'ReportController@get_reports_daily_for_user',
            'as' => 'reseller.reports.daily.user'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Report per CLIENT
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/sms-clients', [
            'uses' => 'ReportController@get_sms_report',
            'as' => 'reseller.reports.sms.clients'
        ]);

        Route::get('/reports/sms-clients/{client}', [
            'uses' => 'ReportController@get_sms_client_report',
            'as' => 'reseller.reports.sms.client'
        ]);


        Route::get('/settings/get-country-networks/{id}', [
            'uses' => 'SettingsController@get_networks_by_country'
        ]);

        Route::middleware(['can:manage-groups'])->resource('groups', 'GroupController');

        Route::middleware(['can:manage-stanbic-users'])->prefix('stanbic-users')->group(function () {
            Route::get('{stanbic_user}/reset', 'StanbicUserController@reset')->name('stanbic-users.reset');
            Route::put('{stanbic_user}/reset', 'StanbicUserController@updatePassword')->name('stanbic-users.updatePassword');
            Route::get('{stanbic_user}/lockUnlock', 'StanbicUserController@lockUnlockUser')->name('stanbic-users.lockUnlockUser');
        });
        Route::middleware(['can:manage-stanbic-users'])->resource('stanbic-users', 'StanbicUserController');


        Route::match(['get', 'post'], '/settings/operational-setting', [
            'uses' => 'SettingsController@operational_setting',
            'as' => 'reseller.setting.operational'
        ]);

        /*
        |--------------------------------------------------------------------------
        | Reseller - Comparison Report Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/comparison', [
            'uses' => 'ReportController@get_comparison_report',
            'as' => 'reseller.reports.comparison'
        ]);

        Route::post('/reports/comparison', [
            'uses' => 'ReportController@post_comparison_report',
            'as' => 'reseller.reports.post_comparison'
        ]);

        // reseller client registration
        Route::get('/reports/clients/registrations', [
            'uses' => 'ReportController@client_registrations',
            'as' => 'reseller.reports.client_registrations'
        ]);

        // reseller top clients
        Route::match(['get', 'post'], '/reports/clients/top-clients', [
            'uses' => 'ReportController@top_clients',
            'as' => 'reseller.reports.top_clients'
        ]);

        // RESELLER CAMPAIGNS
        Route::get('/campaigns/dashboard', [
            'uses' => 'CampaignController@view_clients',
            'as' => 'reseller.campaigns.dashboard'
        ]);

        Route::get('/campaigns/daily/dashboard', [
            'uses' => 'CampaignController@view_clients_daily',
            'as' => 'reseller.daily.campaigns.dashboard'
        ]);

        Route::get('/campaigns/{id}/campaigns', [
            'uses' => 'CampaignController@view_campaigns',
            'as' => 'reseller.view.campaigns'
        ]);

        Route::get('/campaigns/api/{id}/campaigns', [
            'uses' => 'CampaignController@view_api_campaigns',
            'as' => 'reseller.view.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/api/daily/{id}/campaigns', [
            'uses' => 'CampaignController@view_api_campaigns_daily',
            'as' => 'reseller.view.campaigns.api.daily'
        ])->middleware('api');

        Route::get('/campaigns/daily/{id}/campaigns', [
            'uses' => 'CampaignController@view_daily_campaigns',
            'as' => 'reseller.daily.view.campaigns'
        ]);

        Route::get('/campaigns/api', [
            'uses' => 'CampaignController@view_clients_api',
            'as' => 'reseller.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/api/daily', [
            'uses' => 'CampaignController@view_clients_api_daily',
            'as' => 'reseller.daily.campaigns.api'
        ])->middleware('api');

        Route::get('/campaigns/{id}/cancel', [
            'uses' => 'CampaignController@cancel_campaigns',
            'as' => 'reseller.campaigns.cancel_campaigns'
        ]);

        Route::get('/campaigns/{id}/send-now', [
            'uses' => 'CampaignController@send_campaign_now',
            'as' => 'reseller.campaigns.send_campaign_now'
        ]);

        Route::get('/campaigns/{id}/edit', [
            'uses' => 'CampaignController@edit_campaign',
            'as' => 'reseller.campaigns.edit_campaign'
        ]);

        Route::post('/campaigns/{id}/edit', [
            'uses' => 'CampaignController@update_campaign',
            'as' => 'reseller.campaigns.update_campaign'
        ]);

        Route::get('/campaigns/{id}/delete', [
            'uses' => 'CampaignController@delete_campaigns',
            'as' => 'reseller.campaigns.delete_campaigns'
        ]);



        /*
    |--------------------------------------------------------------------------
    | Campaign Analytics Route
    |--------------------------------------------------------------------------
    */
        Route::get('/campaigns/{user}/{id}/analytics', [
            'uses' => 'CampaignController@get_campaign_analitics',
            'as' => 'reseller.canalytics'
        ]);
        Route::get('/campaigns/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'reseller.canalytics_api'
        ])->middleware('api');
        Route::get('/campaigns/api/{user}/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'reseller.canalytics_api'
        ])->middleware('api');
        Route::get('/campaigns/api/daily/{user}/{date}/analytics_api', [
            'uses' => 'CampaignController@get_campaign_analitics_api',
            'as' => 'reseller.daily.canalytics_api'
        ])->middleware('api');

        /*
         * RESELLER FINANCIAL REPORTS
         */
        Route::group(['prefix' => '/reports/financial'], function () {
            /*
            |--------------------------------------------------------------------------
            | OPERATIONAL
            |--------------------------------------------------------------------------
            */
            Route::get('/operational-costs', [
                'uses' => 'ReportController@get_operational_costs',
                'as' => 'reseller.reports.operational.costs'
            ]);
            Route::get('/operational-cost/{date}', [
                'uses' => 'ReportController@get_operational_cost',
                'as' => 'reseller.reports.operational.cost'
            ]);
            /*
            |--------------------------------------------------------------------------
            | SALES - BY PERIOD
            |--------------------------------------------------------------------------
            */
            Route::get('/sales/{from?}/{to?}', [
                'uses' => 'ReportController@get_sales',
                'as' => 'reseller.reports.sales'
            ]);
            /*
            |--------------------------------------------------------------------------
            | SALES BY DATE
            |--------------------------------------------------------------------------
            */
            Route::get('/sale/{date}', [
                'uses' => 'ReportController@get_sale',
                'as' => 'reseller.reports.sale'
            ]);
            /*
            |--------------------------------------------------------------------------
            | PROFITABILITY
            |--------------------------------------------------------------------------
            */
            Route::get('/profitability/{from?}/{to?}', [
                'uses' => 'ReportController@get_profitability',
                'as' => 'reseller.reports.profitability'
            ]);

            /*
            |--------------------------------------------------------------------------
            | COMPARE
            |--------------------------------------------------------------------------
            */
            Route::match(['get', 'post'], '/compare-sales', [
                'uses' => 'ReportController@compare_sales',
                'as' => 'reseller.reports.sales.compare'
            ]);
        });

        // API
        Route::group(['prefix' => '/api', 'middleware' => 'api'], function () {
            Route::get('/get-client-senders/{id}', ['uses' => 'ApiController@get_client_senders', 'as' => 'reseller.api.client.senders']);
        });
    });

    /*
    |--------------------------------------------------------------------------
    |   RESELLER API
    |--------------------------------------------------------------------------
    */
    Route::group(['prefix' => 'api', 'middleware' => 'api'], function () {

        Route::post('get-traffic-performance-data', [
            'uses' => 'DashboardController@get_traffic_performance_data'
        ]);
        Route::post('get-financial-data', [
            'uses' => 'DashboardController@get_financial_data'
        ]);

        Route::post('get-reseller-data', [
            'uses' => 'DashboardController@get_reseller_data'
        ]);

        Route::post('get-reseller-data-user', [
            'uses' => 'DashboardController@get_reseller_data_user'
        ]);

        Route::post('get-reseller-users', [
            'uses' => 'DashboardController@get_reseller_users'
        ]);

        Route::get('report/sms-clients', [
            'uses' => 'ReportController@get_sms_report_api'
        ]);

        Route::get('report/sms-client/{user}', [
            'uses' => 'ReportController@get_sms_client_report_api'
        ]);

        Route::post('get-user-log-summary', [
            'uses' => 'DashboardController@get_user_log_summary'
        ]);
        Route::post('get-financial-summary', [
            'uses' => 'DashboardController@get_financial_summary'
        ]);
    });


});

// adverts

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

    // target.json
    Route::group(['prefix' => 'target'], function() {
        Route::get('fetch.json', ['uses' => 'ITargetController@index', 'as' => 'app.ads.target.index']);
        Route::post('filter.json', ['uses' => 'ITargetController@filter', 'as' => 'app.ads.target.filter']);
        Route::get('{id}/grid.json', ['uses' => 'ITargetController@get_grid', 'as' => 'app.ads.target.grid']);
    });

    // client portal
    Route::group(['prefix' => 'ads'], function () {
        // audience
        Route::group(['prefix' => 'aud'], function() {
            Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'app.ads.aud.index']);
            Route::match(['get', 'post'], '/create', ['uses' => 'AudienceController@create', 'as' => 'app.ads.aud.create']);
            Route::match(['get', 'post'], '/{id}/view', ['uses' => 'AudienceController@view', 'as' => 'app.ads.aud.view']);
            Route::get('/{id}/grid', ['uses' => 'AudienceController@use', 'as' => 'app.ads.aud.grid']);
            Route::match(['get', 'post'], '/{id}/use', ['uses' => 'AudienceController@use', 'as' => 'app.ads.aud.use']);
            Route::match(['get', 'post'], '/{id}/edit', ['uses' => 'AudienceController@edit', 'as' => 'app.ads.aud.edit']);
            Route::get('/{id}/delete', ['uses' => 'AudienceController@delete', 'as' => 'app.ads.aud.del']);

            // send adverts
            Route::match(['get', 'post'], '/{id}/send-bulk-sms', ['uses' => 'AdvertController@send_bulk_sms', 'as' => 'app.ads.sms.send']);
            Route::match(['get', 'post'], '/{id}/send-bulk-email', ['uses' => 'AdvertController@send_bulk_email', 'as' => 'app.ads.email.send']);

        });
        Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'app.ads.index']);
        Route::get('adverts', ['uses' => 'AdvertController@adverts', 'as' => 'app.ads.adverts']);
    });

    // esme portal
    // reseller portal
    Route::group(['prefix' => 'esme/ads', 'middleware' => 'auth.esme'], function () {
        // audience
        Route::group(['prefix' => 'aud'], function() {
            Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'esme.ads.aud.index']);
            Route::match(['get', 'post'], '/create', ['uses' => 'AudienceController@create', 'as' => 'esme.ads.aud.create']);
            Route::match(['get', 'post'], '/{id}/view', ['uses' => 'AudienceController@view', 'as' => 'esme.ads.aud.view']);
            Route::get('/{id}/grid', ['uses' => 'AudienceController@use', 'as' => 'esme.ads.aud.grid']);
            Route::match(['get', 'post'], '/{id}/use', ['uses' => 'AudienceController@use', 'as' => 'esme.ads.aud.use']);
            Route::match(['get', 'post'], '/{id}/edit', ['uses' => 'AudienceController@edit', 'as' => 'esme.ads.aud.edit']);
            Route::get('/{id}/delete', ['uses' => 'AudienceController@delete', 'as' => 'esme.ads.aud.del']);

            // send adverts
            Route::match(['get', 'post'], '/{id}/send-bulk-sms', ['uses' => 'AdvertController@send_bulk_sms', 'as' => 'esme.ads.sms.send']);
            Route::match(['get', 'post'], '/{id}/send-bulk-email', ['uses' => 'AdvertController@send_bulk_email', 'as' => 'esme.ads.email.send']);

        });
        Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'esme.ads.index']);
        Route::get('adverts', ['uses' => 'AdvertController@adverts', 'as' => 'esme.ads.adverts']);
    });

    // reseller portal
    Route::group(['prefix' => 'reseller/ads', 'middleware' => 'auth.reseller'], function () {
        // audience
        Route::group(['prefix' => 'aud'], function() {
            Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'reseller.ads.aud.index']);
            Route::match(['get', 'post'], '/create', ['uses' => 'AudienceController@create', 'as' => 'reseller.ads.aud.create']);
            Route::match(['get', 'post'], '/{id}/view', ['uses' => 'AudienceController@view', 'as' => 'reseller.ads.aud.view']);
            Route::get('/{id}/grid', ['uses' => 'AudienceController@use', 'as' => 'reseller.ads.aud.grid']);
            Route::match(['get', 'post'], '/{id}/use', ['uses' => 'AudienceController@use', 'as' => 'reseller.ads.aud.use']);
            Route::match(['get', 'post'], '/{id}/edit', ['uses' => 'AudienceController@edit', 'as' => 'reseller.ads.aud.edit']);
            Route::get('/{id}/delete', ['uses' => 'AudienceController@delete', 'as' => 'reseller.ads.aud.del']);

            // send adverts
            Route::match(['get', 'post'], '/{id}/send-bulk-sms', ['uses' => 'AdvertController@send_bulk_sms', 'as' => 'reseller.ads.sms.send']);
            Route::match(['get', 'post'], '/{id}/send-bulk-email', ['uses' => 'AdvertController@send_bulk_email', 'as' => 'reseller.ads.email.send']);

        });
        Route::get('index', ['uses' => 'AudienceController@index', 'as' => 'reseller.ads.index']);
        Route::get('adverts', ['uses' => 'AdvertController@adverts', 'as' => 'reseller.ads.adverts']);
    });
});


    /**
     * USSD services routes
     */
    Route::group(['middleware' => ['auth'], 'namespace' => 'USSD'], function () {
        //ussd service
        Route::group(['prefix' => 'service'], function () {
            Route::get('index', ['uses' => 'USSDServiceController@index', 'as' => 'service.index']);
            Route::match(['get', 'post'], '/create', ['uses' => 'USSDServiceController@create', 'as' => 'service.create']);
            Route::match( ['get', 'post'],'/{id}/edit', ['uses' => 'USSDServiceController@edit', 'as' => 'service.edit']);
            Route::get('/{id}/delete', ['uses' => 'USSDServiceController@destroy', 'as' => 'service.delete']);
            Route::get('{id}/done', ['uses' => 'USSDServiceController@done', 'as' => 'service.done']);
            Route::get('{id}/view', ['uses' => 'USSDServiceController@show', 'as' => 'service.show']);
            Route::get('{service}/report/dashboard', ['uses' => 'USSDServiceController@reportDashboard', 'as' => 'service.report.dashboard']);
            Route::get('{service}/report/col-dashboard', ['uses' => 'USSDServiceController@reportCollectionsDashboard', 'as' => 'service.collections.dashboard']);
            Route::get('{service}/response/report', ['uses' => 'USSDServiceController@ussdResponseReport', 'as' => 'service.response.report']);
            Route::get('{service}/response/coll-report', ['uses' => 'USSDServiceController@ussdCollectionResponseReport', 'as' => 'service.collections.report']);

            //ussd type subscription routes -  for survey, data collection , vote etc
            Route::get('{ussdService}/subscription/question/create', ['uses' => 'UssdTypeSubscriptionController@getQuestionPage', 'as' => 'service.ussd.subscription.question']);
            Route::get('{ussdQuestion}/subscription/question/edit', ['uses' => 'UssdTypeSubscriptionController@getQuestionUpdatePage', 'as' => 'service.ussd.subscription.question.edit']);
            Route::post('subscription/question/store', ['uses' => 'UssdTypeSubscriptionController@storeQuestion', 'as' => 'service.ussd.subscription.question.store']);

            Route::post('{ussdQuestion}/subscription/question/update', ['uses' => 'UssdTypeSubscriptionController@updateQuestion', 'as' => 'service.ussd.subscription.question.update']);
            Route::delete('{ussdQuestion}/subscription/question/delete', ['uses' => 'UssdTypeSubscriptionController@deleteQuestion', 'as' => 'service.ussd.subscription.question.delete']);

            //ussd question and answer routes
            Route::get('{ussdQuestion}/subscription/answer/create', ['uses' => 'UssdTypeSubscriptionController@getAnswerPage', 'as' => 'service.ussd.subscription.answer']);
            Route::get('{ussdAnswer}/subscription/answer/edit', ['uses' => 'UssdTypeSubscriptionController@getAnswerUpdatePage', 'as' => 'service.ussd.subscription.answer.edit']);
            Route::post('subscription/answer/store', ['uses' => 'UssdTypeSubscriptionController@storeAnswer', 'as' => 'service.ussd.subscription.answer.store']);
            Route::delete('{ussdAnswer}/subscription/answer/delete', ['uses' => 'UssdTypeSubscriptionController@deleteAnswer', 'as' => 'service.ussd.subscription.answer.delete']);
            Route::post('{ussdAnswer}/subscription/answer/update', ['uses' => 'UssdTypeSubscriptionController@updateAnswer', 'as' => 'service.ussd.subscription.answer.update']);

            //ussd payment logic routes
            Route::get('{service}/payment/subscription', ['uses' => 'UssdPaymentController@index', 'as' => 'service.ussd.payment.subscription']);
//            Route::resource('payments', 'UssdPaymentController')->only(['edit', 'update']);
            Route::resource('payments', 'UssdPaymentController');
        });

    });


    /*
    |--------------------------------------------------------------------------
    | Other routes
    |--------------------------------------------------------------------------
    */

Route::match(['get', 'post'], '/sendsmsdlr', [ 'uses' => 'SmsController@send_sms_dlr',  'as' => 'send_sms_dlr']);

Route::match(['get', 'post'], '/api/email', ['uses' => 'EmailController@send_email_api', 'as' => 'email_api'])->middleware('api');
Route::match(['get', 'post'], '/api/sms', ['uses' => 'SmsController@send_sms_api', 'as' => 'sms_api'])->middleware('api');
Route::match(['get', 'post'], '/api/login', ['uses'=>'ApiLoginController@login', 'as' => 'sms_api_login'])->middleware('api');
Route::match(['get', 'post'], '/api/register', ['uses'=>'ApiLoginController@register', 'as' => 'sms_api_register'])->middleware('api');
Route::match(['get', 'post'], '/api/stat', ['uses'=>'ApiLoginController@stat', 'as' => 'sms_api_stat'])->middleware('api');

Route::match(['get', 'post'], '/voice/callback', ['uses' => 'voiceController@voice_callback_api', 'as' => 'voice_callback_api'])->middleware('api');

Route::get('/sms-image/{id}', [
    'uses' => 'SmsController@get_image_for_image',
    'as' => 'sms_image'
]);

/*
|--------------------------------------------------------------------------
| Get User Picture / Logo
|--------------------------------------------------------------------------
*/
    Route::get('profile/{id}/picture', [ 'uses' => 'DashboardController@get_user_picture', 'as' => 'get_user_picture' ]);
    Route::get('get-operators/{country}', [ 'uses' => 'ReportController@getOperators',  'as' => 'get_operators' ]);
    Route::get('lockout', function () { return view('access.lockout'); })->name('lockout');
    Route::get('messaging', function () { return view('messaging.sms'); })->name('messaging');
    Route::match(['get', 'post'], '/testCode', ['uses' => 'ReportController@testCode', 'as' => 'testCode' ]);
Route::get('profile/{id}/picture', [
    'uses' => 'DashboardController@get_user_picture',
    'as' => 'get_user_picture'
]);

Route::get('get-operators/{country}', [
    'uses' => 'ReportController@getOperators',
    'as' => 'get_operators'
]);

/**********************************************/

Route::get('lockout', function () {
    return view('access.lockout');
})->name('lockout');


Route::get('messaging', function () {
    return view('messaging.sms');
})->name('messaging');



Route::match(['get', 'post'], '/testCode', [
    'uses' => 'ReportController@testCode',
    'as' => 'testCode'
]);
/************************************************/
