<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        $this->registerAuthorization();
    }

    private function registerAuthorization()
    {
        // FEATURES AUTHORIZATION
        Gate::define(
            'manage-groups',
            '\App\Policies\AuthPolicy@manage_groups'
        );
        Gate::define(
            'manage-stanbic-users',
            '\App\Policies\AuthPolicy@manage_stanbic_users'
        );


        // DASHBOARD
        Gate::define(
            'view-dashboard',
            '\App\Policies\AuthPolicy@view_dashboard'
        );
        Gate::define(
            'view-sms-dashboard',
            '\App\Policies\AuthPolicy@view_sms_dashboard'
        );
        Gate::define(
            'view-email-dashboard',
            '\App\Policies\AuthPolicy@view_email_dashboard'
        );

        // VOICE SMS

        Gate::define(
            'send-sms-VOICE',
            '\App\Policies\AuthPolicy@send_voice_single'
        );

        // SEND SMS
        Gate::define(
            'view-send-sms',
            '\App\Policies\AuthPolicy@view_send_sms'
        );
        Gate::define(
            'view-simple-bulksms-menu',
            '\App\Policies\AuthPolicy@view_simple_bulksms_menu'
        );
        Gate::define(
            'view-perso-bulksms-menu',
            '\App\Policies\AuthPolicy@view_perso_bulksms_menu'
        );
        Gate::define(
            'send-sms-single',
            '\App\Policies\AuthPolicy@send_sms_single'
        );
        Gate::define(
            'send-voice-single',
            '\App\Policies\AuthPolicy@send_voice_single'
        );
        Gate::define(
            'send-sms-bulk',
            '\App\Policies\AuthPolicy@send_sms_bulk'
        );
        Gate::define(
            'send-sms-group',
            '\App\Policies\AuthPolicy@send_sms_group'
        );
        Gate::define(
            'send-sms-bulk-perso',
            '\App\Policies\AuthPolicy@send_sms_bulk_perso'
        );
        Gate::define(
            'send-sms-group-perso',
            '\App\Policies\AuthPolicy@send_sms_group_perso'
        );


        // SEND EMAIL
        Gate::define(
            'view-send-email',
            '\App\Policies\AuthPolicy@view_send_email'
        );
        Gate::define(
            'view-simple-bulkemail-menu',
            '\App\Policies\AuthPolicy@view_simple_bulkemail_menu'
        );
        Gate::define(
            'view-perso-bulkemail-menu',
            '\App\Policies\AuthPolicy@view_perso_bulkemail_menu'
        );
        Gate::define(
            'send-email-single',
            '\App\Policies\AuthPolicy@send_email_single'
        );
        Gate::define(
            'send-email-bulk',
            '\App\Policies\AuthPolicy@send_email_bulk'
        );
        Gate::define(
            'send-email-group',
            '\App\Policies\AuthPolicy@send_email_group'
        );
        Gate::define(
            'send-email-bulk-perso',
            '\App\Policies\AuthPolicy@send_email_bulk_perso'
        );
        Gate::define(
            'send-email-group-perso',
            '\App\Policies\AuthPolicy@send_email_group_perso'
        );


        // ADDRESS BOOK
        Gate::define(
            'manage-contacts',
            '\App\Policies\AuthPolicy@manage_contacts'
        );

        // REPORT
        Gate::define(
            'view-report',
            '\App\Policies\AuthPolicy@view_report'
        );
        Gate::define(
            'view-report-log-24h-menu',
            '\App\Policies\AuthPolicy@view_report_log_24h_menu'
        );
        Gate::define(
            'view-report-log-24h-wht-msg-menu',
            '\App\Policies\AuthPolicy@view_report_log_24h_wht_msg_menu'
        );
        Gate::define(
            'view-report-specify-period-menu',
            '\App\Policies\AuthPolicy@view_report_specify_period_menu'
        );

        Gate::define(
            'view-report-otp',
            '\App\Policies\AuthPolicy@view_report_otp'
        );
        Gate::define(
            'view-report-transactional',
            '\App\Policies\AuthPolicy@view_report_transactional'
        );
        Gate::define(
            'view-report-bulksms',
            '\App\Policies\AuthPolicy@view_report_bulksms'
        );
        Gate::define(
            'view-report-24h-sms',
            '\App\Policies\AuthPolicy@view_report_24h_sms'
        );
        Gate::define(
            'view-report-24h-wht-msg-sms',
            '\App\Policies\AuthPolicy@view_report_24h_wht_msg_sms'
        );
        Gate::define(
            'view-report-24h-email',
            '\App\Policies\AuthPolicy@view_report_24h_email'
        );
        Gate::define(
            'view-report-specific-sms',
            '\App\Policies\AuthPolicy@view_report_specific_sms'
        );
        Gate::define(
            'view-report-specific-email',
            '\App\Policies\AuthPolicy@view_report_specific_email'
        );
        Gate::define(
            'view-report-reporting',
            '\App\Policies\AuthPolicy@view_report_reporting'
        );
        Gate::define(
            'view-report-comparison',
            '\App\Policies\AuthPolicy@view_report_comparison'
        );
        Gate::define(
            'view-report-2way-msg',
            '\App\Policies\AuthPolicy@view_report_2way_msg'
        );
        Gate::define(
            'view-report-credit-history',
            '\App\Policies\AuthPolicy@view_report_credit_history'
        );
        Gate::define(
            'view-report-invoice',
            '\App\Policies\AuthPolicy@view_report_invoice'
        );


        // REPORT
        Gate::define(
            'view-campaign',
            '\App\Policies\AuthPolicy@view_campaign'
        );
        Gate::define(
            'view-bulk-campaign',
            '\App\Policies\AuthPolicy@view_bulk_campaign'
        );
        Gate::define(
            'view-api-campaign',
            '\App\Policies\AuthPolicy@view_api_campaign'
        );
        Gate::define(
            'view-campaign-bulk-sms',
            '\App\Policies\AuthPolicy@view_campaign_bulk_sms'
        );
        Gate::define(
            'view-campaign-bulk-email',
            '\App\Policies\AuthPolicy@view_campaign_bulk_email'
        );
        Gate::define(
            'view-campaign-api-sms',
            '\App\Policies\AuthPolicy@view_campaign_api_sms'
        );
        Gate::define(
            'view-campaign-api-email',
            '\App\Policies\AuthPolicy@view_campaign_api_email'
        );

        // PROFILE
        Gate::define('edit-profile', '\App\Policies\AuthPolicy@edit_profile');


        Gate::define('view-payment', '\App\Policies\AuthPolicy@view_payment');

        Gate::define('view-sentiment', '\App\Policies\AuthPolicy@view_sentiment');

        Gate::define('view-campaign', '\App\Policies\AuthPolicy@view_campaign');

        Gate::define('view-social-media', '\App\Policies\AuthPolicy@view_social_media');

        Gate::define('view-purchase', '\App\Policies\AuthPolicy@view_payment');
    }
}
