<?php


use Illuminate\Support\Facades\Route;

Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function () {

        Route::group(['middleware' => ['guest']], function () {
        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 () {
        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']);
        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::get('direct','AdminCompanyController@direct')->name('admin.root.company.direct');
                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'=>'tickets'],function (){
                    Route::get('/','AdminCompanyController@tickets')->name('admin.tickets');
                    Route::any('update/{ticket}','AdminCompanyController@ticket_update')->name('admin.tickets.update');
                });



                Route::group(['prefix'=>'user-sender-id'],function (){
                    Route::get('/sender_id/get','DashboardController@all_sender_ids')->name('user.sender-id.table');
                    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::any('pricing/create','SpricingController@create')->name('admin.social-media.pricing.create');
            Route::any('edit/{media}','SpricingController@edit')->name('admin.social-media.pricing.edit');
            Route::any('delete/{media}','SpricingController@delete')->name('admin.social-media.pricing.delete');
        });


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


        Route::group(['prefix'=>'email-price-setup'],function (){
            Route::any('pricing','SpricingController@email_price_index')->name('admin.email.price.setup.index');
            Route::any('pricing/create','SpricingController@email_price_create')->name('admin.email.price.setup.create');
            Route::any('pricing/{package}/edit','SpricingController@email_price_edit')->name('admin.email.price.setup.edit');
            Route::any('pricing/{package}/delete','SpricingController@email_price_destroy')->name('admin.email.price.setup.delete');
        });



        Route::group(['prefix'=>'email-payment'],function (){
            Route::any('history','SpricingController@email_payment_history')->name('admin.email.price.payment.history');
        });


        Route::group(['prefix'=>'tax-settings'],function (){
            Route::resource('tax','TaxController');
        });



        Route::group(['prefix'=>'ussd'],function (){
            Route::any('pricing','UssdPricingController@index')->name('admin.ussd.pricing');
            Route::any('pricing/create','UssdPricingController@create')->name('admin.ussd.pricing.create');
            Route::any('edit/{price}','UssdPricingController@edit')->name('admin.ussd.pricing.edit');
            Route::any('delete/{price}','UssdPricingController@delete')->name('admin.ussd.pricing.delete');
        });


        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::get('/report/report_get_log_24h', ['uses' => 'DashboardController@get_sms_undelivered_log_24h', 'as' => 'admin.report_get_sms_log_new_24h']);


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


        /*
        |--------------------------------------------------------------------------
        | Admin - Report Dept Status Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/dept-status', ['uses' => 'ReportController@get_reports_dept_status', 'as' => 'admin.reports.dept_status']);

         /*
        |--------------------------------------------------------------------------
        | Admin - Report USSD Client Route
        |--------------------------------------------------------------------------
        */
        Route::get('/reports/ussd-client', ['uses' => 'ReportController@get_reports_ussd_client', 'as' => 'admin.reports.ussd_client']);


        /*
        |--------------------------------------------------------------------------
        | 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 - Report Financial Analysis Route
        |--------------------------------------------------------------------------
        */
        //Route::match(['get', 'post'], '/reports/finanacial', ['uses' => 'ReportController@get_reports_specific', 'as' => 'admin.reports.financial.analysis']);

        Route::get('/reports/financial-ananlysis', ['uses' => 'ReportController@get_financial_analysis_report', 'as' => 'admin.reports.financial.analysis']);

        /*
       |--------------------------------------------------------------------------
       | Admin - Social Media Report Route
       |--------------------------------------------------------------------------
       */

        Route::get('/reports/social-media', 'ReportController@getSocialMediaReport')->name('admin.reports.social.media');

        /*
         |--------------------------------------------------------------------------
         | Admin - Email Portal Report Route
         |--------------------------------------------------------------------------
        */
        Route::get('/reports/email-portal', 'ReportController@getEmailPortalReport')->name('admin.reports.email.portal');

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

        /*
      |--------------------------------------------------------------------------
      | Admin - Update Users Route
      |--------------------------------------------------------------------------
      */
        Route::get('/users/{user}/edit',  'UserController@edit_user')->name('admin.users.edit_user');

        Route::post('/users/{user}/edit', 'UserController@update_user')->name('admin.users.update_user');


        Route::any('/users/sender_id/{id}/update','AdminCompanyController@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::any('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');
    });

});
