<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AdmincpServiceProvider extends ServiceProvider
{
    public function register() {}

    public function boot()
    {
        \Hook::listen('filter-text', function ($text) {
            $badwords = config('user-badwords');
            $replace = config('user-badwords-replace');

            $badwords = (empty($badwords)) ? [] : explode(',', $badwords);

            $words = implode('|', array_filter(array_map('preg_quote', array_map('trim', $badwords))));

            foreach ($badwords as $badword) {
                // $text = @preg_replace("/\b($words)\b/uie", '"".str_repeat("$replace",strlen("$1")).""', $text);
                $text = preg_replace("/($words)/i", str_repeat("$replace", strlen('$1')), $text);
            }

            return $text;
        });

        include app_path().'/Routes/routes/admincp.php'; 

        if (config('system.installed')) {

            // Prefer request-scoped sources over any global cache key.
            $cookieLang = null;
            try {
                $cookieLang = request()->cookie('lang');
            } catch (\Throwable $e) {
                $cookieLang = null;
            }
            $requestedLang = (string) (\Session::get('current-language') ?: (\Session::get('lang') ?: ($cookieLang ?: 'en')));

            if (\Auth::check()) {
                // Cache user language preference to avoid UserPresenter overhead
                $userId = \Auth::user()->id;
                $cacheKey = 'user-lang-' . $userId;
                
                $lang = \Cache::remember($cacheKey, 60, function () {
                    return \Auth::user()->present()->privacy('lang', 'en');
                });
                
                \App::setLocale($lang);
            }

            \App::setLocale($requestedLang);
            if (\Session::has('current-language') and \Auth::check()) {
                $userId = \Auth::user()->id;
                $sessionLang = \Session::get('current-language');
                
                // Get cached user language preference
                $cacheKey = 'user-lang-' . $userId;
                $userLang = \Cache::get($cacheKey);
                
                if (!$userLang || $userLang != $sessionLang) {
                    $this->app->make('App\\Repositories\UserRepository')->savePrivacy(['lang' => $sessionLang]);
                    \Cache::put($cacheKey, $sessionLang, 60); // Cache for 1 hour
                }
            }

            $configurationRepository = $this->app->make('App\\Repositories\ConfigurationRepository');
            $configurations = $configurationRepository->getNameLists();

            foreach ($configurations as $configuration) {
                if ($configuration != 'general') {
                    \Menu::add('admincp-configuration', $configuration, [
                        'link' => \URL::to('admincp/configurations/'.$configuration),
                        'name' => ucwords($configuration).'',
                    ]);
                }
            }
        }

        \Menu::add('admincp-configuration', 'general', [
            'link' => \URL::to('admincp/configurations/general'),
            'name' => 'General',
        ]);

        /**User menus***/
        \Menu::add('admincp-users', 'list', [
            'link' => \URL::route('admincp-user-list'),
            'name' => 'Lists',
        ]);

        /**\Menu::add('admincp-users', 'add-user', [
            'link' => \URL::route('admincp-user-list'),
            'name' => 'Add user',
        ]);**/

        \Menu::add('admincp-users', 'unvalidated-list', [
            'link' => \URL::route('admincp-user-unvalidated-list'),
            // 'name' => 'Unvalidated Members',
            'name' => 'Inactive Members',
        ]);
        \Menu::add('admincp-users', 'custom-field', [
            'link' => \URL::route('admincp-user-custom-field'),
            'name' => 'Custom Fields',
        ]);

        \Menu::add('admincp-users', 'ban-users', [
            'link' => \URL::route('admincp-ban-users'),
            'name' => 'Banned Users',
        ]);
        \Menu::add('admincp-users', 'mediacontributor-list', [
            'link' => \URL::route('admincp-user-mediacontributor-list'),
            'name' => 'Media Contributors',
        ]);

        \Menu::add('admincp-users', 'community-list', [
            'link' => \URL::route('admincp-community-list'),
            'name' => 'Community List',
        ]);

        \Menu::add('admincp-users', 'reported-post-list', [
            'link' => \URL::route('admincp-reported-post-list'),
            'name' => 'Reported Post List',
        ]);

        \Menu::add('admincp-users', 'identity-applications', [
            'link' => \URL::route('admincp-identity-applications'),
            'name' => 'Identity Applications',
        ]);

        \Menu::add('admincp-users', 'deactivated-list', [
            'link' => \URL::route('admincp-user-deactivated-list'),
            'name' => 'Deactivated Accounts',
        ]);

        \Menu::add('admincp-users', 'unverified-list', [
            'link' => \URL::route('admincp-user-unverified-list'),
            'name' => 'Unverified Emails',
        ]);

        \Menu::add('admincp-users', 'incomplete-registration-list', [
            'link' => \URL::route('admincp-incomplete-registration-list'),
            'name' => 'Incomplete registration users',
        ]);

        \Menu::add('admincp-menu', 'language', [
            'link' => '',
            'name' => 'Manage Translation',
            'icon' => '<i class="sidebar-menus-icon fa fa-language"></i>',
        ]);

        \Menu::add('sub-menu-language', 'list', [
            'link' => \URL::to('admincp/languages'),
            'name' => 'Languages',
        ]);

        \Menu::add('sub-menu-language', 'add-language', [
            'link' => \URL::to('admincp/languages/add'),
            'name' => 'Add Languages',
        ]);

        // communities menu
        \Menu::add('admincp-menu', 'communities', [
            'link' => \URL::to('admincp/communities'),
            'name' => 'Manage Communities',
            'icon' => '<i class="sidebar-menus-icon fa fa-sitemap"></i>',
        ]);

        // pages menu
        \Menu::add('admincp-menu', 'page', [
            'link' => '',
            'name' => 'Manage Stores',
            'icon' => '<i class="sidebar-menus-icon fa fa-briefcase"></i>',
        ]);

        \Menu::add('sub-menu-page', 'pages', [
            'link' => \URL::to('admincp/pages'),
            'name' => 'Stores',
        ]);
		
		\Menu::add('sub-menu-page', 'pages-kyc', [
            'link' => \URL::to('admincp/pages/kyc-details'),
            'name' => 'KYC Details',
        ]);

        \Menu::add('sub-menu-page', 'page-category', [
            'link' => \URL::to('admincp/pages/categories'),
            'name' => 'Categories',
        ]);

        \Menu::add('sub-menu-page', 'page-create-category', [
            'link' => \URL::to('admincp/pages/create/category'),
            'name' => 'Add Categories',
        ]);

        \Menu::add('sub-menu-page', 'page-subcategory', [
            'link' => \URL::to('admincp/pages/subcategory'),
            'name' => 'Sub Categories',
        ]);

        \Menu::add('sub-menu-page', 'page-create-subcategory', [
            'link' => \URL::to('admincp/pages/create/subcategory'),
            'name' => 'Add Sub Categories',
        ]);

        // Report menu
        \Menu::add('admincp-menu', 'report', [
            'link' => '',
            'name' => 'Reports',
            'icon' => '<i class="sidebar-menus-icon fa fa-flag"></i>',
        ]);

        \Menu::add('sub-menu-report', 'report-post', [
            'link' => \URL::to('admincp/reports'),
            'name' => 'Posts',
        ]);

        \Menu::add('sub-menu-report', 'report-profile', [
            'link' => \URL::to('admincp/reports?type=profile'),
            'name' => 'Profile',
        ]);

        \Menu::add('sub-menu-report', 'report-community', [
            'link' => \URL::to('admincp/reports?type=community'),
            'name' => 'Communities',
        ]);

        \Menu::add('sub-menu-report', 'report-page', [
            'link' => \URL::to('admincp/reports?type=page'),
            'name' => 'Pages',
        ]);

        // Additional pages
        \Menu::add('admincp-menu', 'website-page', [
            'link' => \URL::to('admincp/website-page'),
            'name' => 'Homepage Design',
            'icon' => '<i class="sidebar-menus-icon fa fa-globe"></i>',
        ]);

        // Additional pages
        \Menu::add('admincp-menu', 'additional-page', [
            'link' => '',
            'name' => 'Website Pages',
            'icon' => '<i class="sidebar-menus-icon fa fa-globe"></i>',
        ]);

        /* \Menu::add('sub-menu-additional-page', 'about-us', [
             'link' => \URL::to('admincp/additional-page?slug=about-us'),
             'name' => 'About US',
         ]); */

        \Menu::add('sub-menu-additional-page', 'footer-address', [
            'link' => \URL::to('admincp/additional-page?slug=idwebsite-footer-address'),
            'name' => 'Footer address',
        ]);

        \Menu::add('sub-menu-additional-page', 'terms-and-condition', [
            'link' => \URL::to('admincp/additional-page?slug=terms-and-condition'),
            'name' => 'Terms and Condition',
        ]);

        \Menu::add('sub-menu-additional-page', 'disclaimer', [
            'link' => \URL::to('admincp/additional-page?slug=disclaimer'),
            'name' => 'Disclaimer',
        ]);

        \Menu::add('sub-menu-additional-page', 'privacy-policy', [
            'link' => \URL::to('admincp/additional-page?slug=privacy-policy'),
            'name' => 'Privacy Policy',
        ]);
		
		\Menu::add('sub-menu-additional-page', 'invoiceterms', [
            'link' => \URL::to('admincp/additional-page?slug=invoiceterms'),
            'name' => 'Invoice Terms',
        ]);

        \Menu::add('sub-menu-additional-page', 'additionalpages', [
            'link' => \URL::to('admincp/additionalpages'),
            'name' => 'Additional Pages',
        ]);

        /*\Menu::add('sub-menu-additional-page', 'job-vacancy', [
            'link' => \URL::to('admincp/additional-page?slug=job-vacancy'),
            'name' => 'Job Vacancy',
        ]);*/

        // Help system
        \Menu::add('admincp-menu', 'help', [
            'link' => '',
            'name' => 'Manage Helps',
            'icon' => '<i class="sidebar-menus-icon fa fa-info-circle"></i>',
        ]);

        \Menu::add('sub-menu-help', 'lists', [
            'link' => \URL::to('admincp/helps/list'),
            'name' => 'Lists',
        ]);

        \Menu::add('sub-menu-help', 'add', [
            'link' => \URL::to('admincp/helps/add'),
            'name' => 'Add Help',
        ]);

        // Games system
        \Menu::add('admincp-menu', 'games', [
            'link' => '',
            'name' => 'Manage Games',
            'icon' => '<i class="sidebar-menus-icon fa fa-trophy"></i>',
        ]);

        \Menu::add('sub-menu-games', 'list', [
            'link' => \URL::to('admincp/games'),
            'name' => 'Lists',
        ]);

        \Menu::add('sub-menu-games', 'add', [
            'link' => \URL::to('admincp/games/add'),
            'name' => 'Add Games',
        ]);

        \Menu::add('sub-menu-games', 'categories', [
            'link' => \URL::to('admincp/games/categories'),
            'name' => 'Categories',
        ]);

        \Menu::add('sub-menu-games', 'categories-add', [
            'link' => \URL::to('admincp/games/create/category'),
            'name' => 'Add Categories',
        ]);

        \Menu::add('admincp-menu', 'ads', [
            'link' => \URL::to('admincp/ads'),
            'name' => 'Manage Ads',
            'icon' => '<i class="sidebar-menus-icon fa fa fa-adn"></i>',
        ]);

        // newsletter admincpc management
        \Menu::add('admincp-menu', 'newsletter', [
            'link' => '',
            'name' => 'NewsLetter',
            'icon' => '<i class="sidebar-menus-icon fa fa-newspaper-o"></i>',
        ]);

        \Menu::add('sub-menu-newsletter', 'list', [
            'link' => \URL::to('admincp/newsletter'),
            'name' => 'Lists',
        ]);
        \Menu::add('sub-menu-newsletter', 'list', [
            'link' => \URL::to('admincp/newsletter'),
            'name' => 'Lists',
        ]);

        \Menu::add('admincp-menu', 'contest', [
            'link' => \URL::to('admincp/contest'),
            'name' => 'Contest Management',
            'icon' => '<i class="sidebar-menus-icon fa fa-trophy"></i>',
        ]);

        // listing to new users
        $this->app['events']->listen('user.register', function ($user) {
            $users = config('users-autofollow');

            if (! empty($users)) {
                $users = explode(',', $users);
                foreach ($users as $thisUser) {
                    $thisUser = app('App\\Repositories\\UserRepository')->findByIdUsername($thisUser);
                    if ($thisUser) {
                        $connection = app('App\\Repositories\\ConnectionRepository');
                        $connection->add($user->id, $thisUser->id, 1);
                    }
                }
            }

            // communities
            $communities = config('community-autojoin');
            if (! empty($communities)) {
                $communities = explode(',', $communities);
                foreach ($communities as $slug) {
                    $communityRepo = app('App\\Repositories\\CommunityRepository');
                    $community = $communityRepo->get($slug);
                    if ($community) {
                        $communityRepo->join($community->id, $user->id);
                    }
                }
            }

            // for pages comming later
            $pages = config('pages-autolike');
            if (! empty($pages)) {
                $pages = explode(',', $pages);
                foreach ($pages as $slug) {
                    $pageRepository = app('App\\Repositories\\PageRepository');
                    $page = $pageRepository->get($slug);
                    if ($page) {
                        app('App\\Repositories\\LikeRepository')->add('page', $page->id, $user->id);
                    }
                }
            }
        });
    }
}
