<?php

namespace App\Providers;

use App\AdminAccessRight;
use App\Company;
use App\CompanyEmail;
use App\CompanyStatus;
use App\LogReceived;
use App\MediaPrice;
use App\User;
use App\UserPost;
use App\UserSenderId;
use App\UserSocial;
use Carbon\Carbon;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Facebook;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
use PhpParser\Node\Expr\ShellExec;
use function Sodium\add;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {

        Schema::defaultStringLength(191);


        $this->app['validator']->extend('base64', 'App\Rules\Base64Rule@validate');

        $this->app['validator']->replacer('base64', function ($message, $attribute, $rule, $parameters) {
            return str_replace(':attribute', $attribute, 'The :attribute must be a valid base64-encoded string with a maximum size of 1MB.');
        });
        //
//        $app_user = 'testapiuser';
//        $key = '785627664981125123';
//        $client_secrete = '$!pO3t&89n*&xxzq-45972nn@56!!';
//        $encrypted = hash_hmac('sha256', $key, $client_secrete);
//        dd($encrypted);


        //
//        $app_user = 'testapiuser';
//        $key = '785627664981125123';
//        $client_secrete = '&xxzq-45972nn@56!!$!pO3t&89n*1';
//        $encrypted = hash_hmac('sha256', $key, $client_secrete);
//
//        dd($encrypted);



        //        dd(bcrypt("slicesofnions123"));
        view()->composer('*', function ($view) {






            $is_reseller_client = false;
            $user = Auth::user();
            if (!empty($user)) {
                if ($user->created_by !== 'messenger') {
                    $is_reseller_client = true;
                }
                $createdUser = User::where('username', $user->created_by)->first();
                if ($user->role->name == 'reseller' && !empty($user->picture)) {
                    $logo = route('get_user_picture', ['id' => $user->id]);
                } else if (!empty($createdUser) && $createdUser->role->name == 'reseller' && !empty($createdUser->picture)) {
                    $logo = route('get_user_picture', ['id' => $createdUser->id]);
                }
            }

            $logo = asset('img/logo.png');


            $price_check = Auth::user()->company->legal_status ?? null;
            $price = MediaPrice::query()->where('business_type', $price_check)->select('cost')->first();


            if (Auth::user() && !empty(Auth::user()->admin_access_rights->id)) {
                $id = Auth::user()->admin_access_rights->value;


                $company = DB::table('company_statuses')->where('status', 3)->count();

            }

            $company_approved = CompanyStatus::query()->with('company')
                ->where('company_statuses.status', 1)->get()->count();






            $sender_id_count = UserSenderId::query()->where('status', false)->get()->count();
            $company_email = CompanyEmail::query()->where('status', null)->get()->count();
            $email_sources = CompanyEmail::query()->where([['status', 1], ['company_id', @Auth::user()->company->id]])->get();


            $appId = '432314024004251';
            $appSecret = '3a659294ccf3fc6ee827bc47978186e1';



            $fb = new Facebook([
                'app_id' => $appId,
                'app_secret' => $appSecret,
                'default_graph_version' => 'v3.2'
            ]);

            ;

            $helper = $fb->getRedirectLoginHelper();
            $permissions = ['email', 'manage_pages', 'publish_pages']; // Optional permissions
            $callback = route('social.facebook');
            $loginUrl = $helper->getLoginUrl($callback, $permissions);
            $route = htmlspecialchars($loginUrl);


            $view->with([
                'ulogo' => $logo,
                '_user' => $user,
                'is_reseller_client' => $is_reseller_client,
                'fb_route' => $route,
                'company_pending' => @$company,
                'company_approved' => @$company_approved,
                'sender_id_count' => $sender_id_count,
                'company_email' => $company_email,
                'email_sources' => @$email_sources,
                'price_check' => @$price_check,
                'price' => @$price->cost
            ]);
        });

    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('mailgun.client', function () {
            return \Http\Adapter\Guzzle6\Client::createWithConfig([
                // your Guzzle6 configuration
                'verify' => false
            ]);
        });
    }
}