KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.4.41 (Ubuntu)
System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64
User : www-data ( 33)
PHP Version : 8.2.12
Disable Function : NONE
Directory :  /var/www/account.appointkrypt.com/app/Helper/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/account.appointkrypt.com/app/Helper/helper.php
<?php

use App\Models\AddOn;
use App\Models\Coupon;
use App\Models\Currency;
use App\Models\Language;
use App\Models\Order;
use App\Models\Permission;
use App\Models\Plan;
use App\Models\User;
use App\Models\Business;
use App\Models\userActiveModule;
use Illuminate\Support\Collection;
use App\Models\Setting;
use App\Models\UserCoupon;
use Illuminate\Support\Facades\Auth;
use Nwidart\Modules\Facades\Module;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Cache;
use App\Models\Service;
use App\Models\Appointment;
use App\Models\BusinessHours;
use Carbon\Carbon;

if(!function_exists('getMenu')){
    function getMenu(){
        $user = auth()->user();
        return Cache::rememberForever('sidebar_menu_'.$user->id,function () use($user)
        {
                $role = $user->roles->first();
                $menu = new \App\Classes\Menu($user);
                if($role->name == 'super admin'){
                    event(new \App\Events\SuperAdminMenuEvent($menu));
                }else{
                    event(new \App\Events\CompanyMenuEvent($menu));
                }
                return generateMenu($menu->menu,null);
            }
        );
    }
}

if (!function_exists('generateMenu')) {
    function generateMenu($menuItems, $parent = null)
    {
        $html = '';

        $filteredItems = array_filter($menuItems, function ($item) use ($parent) {
            return $item['parent'] == $parent;
        });

        usort($filteredItems, function ($a, $b) {
            return $a['order'] - $b['order'];
        });

        foreach ($filteredItems as $item) {
            $hasChildren = hasChildren($menuItems, $item['name']);
            if($item['parent'] == null)
            {
                $html .= '<li class="dash-item dash-hasmenu">';
            }
            else
            {
                $html .= '<li class="dash-item">';
            }
            $html .= '<a href="' . (!empty($item['route']) ? route($item['route']) : '#!') . '" class="dash-link">';

            if($item['parent'] == null)
            {
                $html .= ' <span class="dash-micon"><i class="ti ti-' . $item['icon'] . '"></i></span>
                <span class="dash-mtext">';
            }
            $html .= __($item['title']) . '</span>';

            if ($hasChildren) {
                $html .= '<span class="dash-arrow"> <i data-feather="chevron-right"></i> </span> </a>';
                $html .= '<ul class="dash-submenu">';
                $html .= generateMenu($menuItems, $item['name']);
                $html .= '</ul>';
            }
            else
            {
                $html .= '</a>';

            }

            $html .= '</li>';
        }
        return $html;
    }
}

if (!function_exists('hasChildren')) {
    function hasChildren($menuItems, $name)
    {
        foreach ($menuItems as $item) {
            if ($item['parent'] === $name) {
                return true;
            }
        }
        return false;
    }
}


if(!function_exists('getSettingMenu')){
    function getSettingMenu(){
        $user = auth()->user();
        $role = $user->roles->first();
        $menu = new \App\Classes\Menu($user);
        if($role->name == 'super admin'){
            event(new \App\Events\SuperAdminSettingMenuEvent($menu));
        }else{
            event(new \App\Events\CompanySettingMenuEvent($menu));
        }
		return generateSettingMenu($menu->menu);
    }
}


if (!function_exists('generateSettingMenu')) {
function generateSettingMenu($menuItems)
{
		usort($menuItems, function($a, $b) {
    return $a['order'] - $b['order'];
});

    $html = '';
	foreach($menuItems as $menu)
	{
	    $html .= '<a href="#'. $menu['navigation'] .'" data-module="'.$menu['module'].'" class="list-group-item list-group-item-action setting-menu-nav">' . $menu['title'] . '<div class="float-end"><i class="ti ti-chevron-right"></i></div></a>';
	}
    return $html;
}
}
if (!function_exists('getSettings')) {
    function getSettings()
    {
        $user = auth()->user();
        $role = $user->roles->first();
        if($role->name == 'super admin'){
            $settings = getAdminAllSetting();
            $html = new \App\Classes\Setting($user,$settings);
            event(new \App\Events\SuperAdminSettingEvent($html));
        }else{
            $settings = getCompanyAllSetting();
            $html = new \App\Classes\Setting($user,$settings);
            event(new \App\Events\CompanySettingEvent($html));
        }
		return generateSettings($html->html);
    }
}
if (!function_exists('generateSettings')) {
    function generateSettings($settingItems)
    {
        usort($settingItems, function($a, $b) {
            return $a['order'] - $b['order'];
        });

        $html = '';
        foreach($settingItems as $setting)
        {
        $html .= $setting['html'];
        }
        return $html;
    }
}

if (!function_exists('getAdminAllSetting')) {
    function getAdminAllSetting()
    {
        // Laravel cache
        return Cache::rememberForever('admin_settings',function () {
            $super_admin = User::where('type','super admin')->first();
            $settings = [];
            if($super_admin)
            {
                $settings = Setting::where('created_by',$super_admin->id)->where('business',$super_admin->active_business)->pluck('value', 'key')->toArray();
            }

            return $settings;
        });
    }
}

if (!function_exists('getCompanyAllSetting')) {
    function getCompanyAllSetting($user_id = null, $business = null)
    {
        if(!empty($user_id)){
            $user = User::find($user_id);
        }
        else
        {
            $user =  auth()->user();
        }
        
        // // Check if the user is not 'company' or 'super admin' and find the creator
        if (!in_array($user->type, ['company', 'super admin'])) {
            $user = User::find($user->created_by);
        }

        if (!empty($user))
        {
            $business = $business ?? $user->active_business;
            $key = 'company_settings_'.$business.'_'.$user->id;
            return Cache::rememberForever($key,function () use ($user, $business) {
                $settings = [];
                $settings = Setting::where('created_by',$user->id)->where('business',$business)->pluck('value', 'key')->toArray();                
            return $settings;
            });
        }

        return [];
    }
}

if (! function_exists('admin_setting')) {
    function admin_setting($key)
    {
        if($key)
        {
            $admin_settings = getAdminAllSetting();
            $setting = (array_key_exists($key, $admin_settings)) ? $admin_settings[$key] : null;
            return $setting;
        }
    }
}

if (! function_exists('company_setting')) {
    function company_setting($key,$user_id= null,$business= null)
    {
        if($key)
        {
            $company_settings = getCompanyAllSetting($user_id,$business);
            $setting = null;
            if(!empty($company_settings))
            {
                $setting = (array_key_exists($key, $company_settings)) ? $company_settings[$key] : null;
            }
            return $setting;
        }
    }
}

if (! function_exists('AdminSettingCacheForget')) {
    function AdminSettingCacheForget()
    {
        try {
            Cache::forget('admin_settings');
        } catch (\Exception $e) {
            \Log::error('AdminSettingCacheForget :'.$e->getMessage());
        }
    }
}

if (! function_exists('comapnySettingCacheForget')) {
    function comapnySettingCacheForget()
    {
        try {
            $key = 'company_settings_'.getActiveBusiness().'_'.creatorId();
            Cache::forget($key);
        } catch (\Exception $e) {
            \Log::error('comapnySettingCacheForget :'.$e->getMessage());
        }
    }
}

if (! function_exists('sideMenuCacheForget')) {
    function sideMenuCacheForget($type = null)
    {
        if($type == 'all')
        {
            Cache::flush();
        }

        $user = auth()->user();
        if($user->type == 'company')
        {
            $users = User::select('id')->where('created_by',$user->id)->pluck('id');
            foreach ($users as $id) {
                try {
                    $key = 'sidebar_menu_'.$id;
                    Cache::forget($key);
                } catch (\Exception $e) {
                    \Log::error('comapnySettingCacheForget :'.$e->getMessage());
                }
            }
            try {
                $key = 'sidebar_menu_'.$user->id;
                Cache::forget($key);
            } catch (\Exception $e) {
                \Log::error('comapnySettingCacheForget :'.$e->getMessage());
            }
            return true;
        }

        try {
            $key = 'sidebar_menu_'.$user->id;
            Cache::forget($key);
        } catch (\Exception $e) {
            \Log::error('comapnySettingCacheForget :'.$e->getMessage());
        }

        return true;
    }
}

if (! function_exists('getActiveBusiness')) {
    function getActiveBusiness($user_id= null){
        if(!empty($user_id)){
            $user = User::find($user_id);
        }
        else
        {
            $user =  auth()->user();
        }

        if($user)
        {
            if(!empty($user->active_business)){
                return $user->active_business;
            }else{
                if($user->type == 'super admin'){
                    return 0;
                }else{
                    static $business= null;
                    if($business == null)
                    {
                        $business = Business::where('created_by',$user->id)->first();
                    }
                    return $business->id;
                }
            }
        }
    }
}

if (! function_exists('getBusiness')) {
    function getBusiness(){
        $data = [];
        if(Auth::check())
        {
            static $users= null;
            if($users == null)
            {
                $users = User::where('email',Auth::user()->email)->get();
            }
            static $business= null;
            if($business == null)
            {
                $business =  Business::whereIn('id',$users->pluck('business_id')->toArray())->orWhereIn('created_by',$users->pluck('id')->toArray())->where('is_disable',1)->get();
            }
            return $business;
        }
        else
        {
            return $data;
        }
    }
}


if(! function_exists('creatorId')){
    function creatorId(){
        if(Auth::user()->type == 'super admin' || Auth::user()->type == 'company'){
            return Auth::user()->id;
        }else{
            return Auth::user()->created_by;
        }
    }
}


if (! function_exists('getModuleList')) {
    function getModuleList(){
        $all = Module::getOrdered();
        $list = [];
        foreach($all as $module){
            array_push($list,$module->getName());
        }
        return $list;
    }
}

if (! function_exists('getshowModuleList')) {
    function getshowModuleList(){
        $all = Module::getOrdered();
        $list = [];
        foreach($all as $module){
            $path =$module->getPath().'/module.json';
            $json = json_decode(file_get_contents($path), true);
            if (!isset($json['display']) || $json['display'] == true)
            {
                array_push($list,$module->getName());
            }

        }
        return $list;
    }
}

if(! function_exists('module_is_active')){
    function module_is_active($module,$user_id = null){
        if(Module::has($module)){
            $module = Module::find($module);
            if($module->isEnabled())
            {
                if(Auth::check())
                {
                    $user = Auth::user();
                }
                elseif($user_id != null)
                {
                    $user = User::find($user_id);
                }
                if(!empty($user))
                {
                    if($user->type == 'super admin')
                    {
                        return true;
                    }
                    else
                    {
                        $active_module = ActivatedModule($user->id);
                        if((count($active_module) > 0 && in_array($module->getName(),$active_module)))
                        {
                            return true;
                        }
                        return false;
                    }
                }
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }

    }
}
if(! function_exists('ActivatedModule')){
    function ActivatedModule($user_id = null)
    {
        $activated_module = user::$superadmin_activated_module;

        if($user_id != null)
        {
            $user = User::find($user_id);
        }
        elseif(Auth::check())
        {
            $user = Auth::user();
        }
        if(!empty($user))
        {
            $available_modules = array_keys(Module::getByStatus(1));

            if($user->type == 'super admin')
            {
                $user_active_module = $available_modules;
            }
            else
            {
                if($user->type != 'company')
                {
                    $user_not_com = User::find($user->created_by);
                    if(!empty($user))
                    {
                        // Sidebar Performance Changes
                        static $active_module = null;
                        if($active_module == null){
                            $active_module = userActiveModule::where('user_id', $user_not_com->id)->pluck('module')->toArray();
                        }
                    }
                }
                else
                {
                    static $active_module = null;
                    if($active_module == null){
                        $active_module = userActiveModule::where('user_id', $user->id)->pluck('module')->toArray();
                    }
                }

                // Find the common modules
                $commonModules = array_intersect($active_module, $available_modules);
                $user_active_module = array_unique(array_merge($commonModules,$activated_module));
            }

        }
        return $user_active_module;
    }
}
// module alias name
if(! function_exists('Module_Alias_Name'))
{
    function Module_Alias_Name($module_name)
    {
        static $addons = [];
        static $resultArray = [];
        if(count($addons) == 0 && count($resultArray) == 0 )
        {
            $addons = AddOn::all()->toArray();
            $resultArray = array_reduce($addons, function ($carry, $item) {
                // Check if both "module" and "name" keys exist in the current item
                if (isset($item['module']) && isset($item['name'])) {
                    // Add a new key-value pair to the result array
                    $carry[$item['module']] = $item['name'];
                }
                return $carry;
            }, []);
        }

        $module = Module::find($module_name);
        if(isset($resultArray))
        {
           $module_name =  array_key_exists($module_name,$resultArray) ? $resultArray[$module_name] : ( !empty($module) ? $module->get('alias') : $module_name );
        }
        elseif(!empty($module))
        {
            $module_name = $module->get('alias');
        }
        return $module_name;
    }
}

if (! function_exists('get_permission_by_module')) {
    function get_permission_by_module($mudule){
        $user = Auth::user();

        if($user->type == 'super admin')
            {
                $permissions = Permission::where('module',$mudule)->orderBy('name')->get();
            }
            else
            {
                $permissions = new Collection();
                foreach($user->roles as $role)
                {
                    $permissions = $permissions->merge($role->permissions);
                }
                $permissions = $permissions->where('module', $mudule);

            }
        return $permissions;
    }
}

if (! function_exists('getActiveLanguage')) {
    function getActiveLanguage(){
        if((Auth::check()) && (!empty(Auth::user()->lang))){
            return Auth::user()->lang;
        }else{
            $admin_settings = getAdminAllSetting();
            return !empty($admin_settings['defult_language']) ? $admin_settings['defult_language'] : 'en';
        }
    }
}

if (! function_exists('languages')) {
    function languages(){

        try {
            $arrLang = Language::where('status',1)->get()->pluck('name','code')->toArray();
        } catch (\Throwable $th) {
            $arrLang=[
                "ar" => "Arabic",
                "da" => "Danish",
                "de" => "German",
                "en" => "English",
                "es" => "Spanish",
                "fr" => "French",
                "it" => "Italian",
                "ja" => "Japanese",
                "nl" => "Dutch",
                "pl" => "Polish",
                "pt" => "Portuguese",
                "ru" => "Russian",
                "tr" => "Turkish"
            ];
        }
        return $arrLang;
    }
}


// setConfigEmail ( SMTP )
if(! function_exists('SetConfigEmail'))
{
    function SetConfigEmail($user_id = null ,$business_id = null)
    {
        try {

            if(!empty($user_id))
            {
                $company_settings = getCompanyAllSetting($user_id);
            }
            elseif(!empty($user_id) && !empty($business_id))
            {
                $company_settings = getCompanyAllSetting($user_id,$business_id);
            }
            else if(Auth::check())
            {
                $company_settings = getCompanyAllSetting();
            }
            else
            {
                $user_id = User::where('type','super admin')->first()->id;
                $company_settings = getCompanyAllSetting($user_id);
            }

                config(
                [
                    'mail.driver' => $company_settings['mail_driver'],
                    'mail.host' => $company_settings['mail_host'],
                    'mail.port' => $company_settings['mail_port'],
                    'mail.encryption' => $company_settings['mail_encryption'],
                    'mail.username' => $company_settings['mail_username'],
                    'mail.password' => $company_settings['mail_password'],
                    'mail.from.address' => $company_settings['mail_from_address'],
                    'mail.from.name' => $company_settings['mail_from_name'],
                ]
            );
            return true;

            } catch (\Exception $e) {

               return false;
            }
    }
}

// file upload

if(! function_exists('upload_file')){
    function upload_file($request,$key_name,$name,$path,$custom_validation =[]){
        try{
            $storage_settings = getAdminAllSetting();
            if(isset($storage_settings['storage_setting'])){
                if($storage_settings['storage_setting'] == 'wasabi' ){
                    config(
                        [
                            'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                            'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                            'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                            'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                            'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                            'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                        ]
                    );
                    $max_size = !empty($storage_settings['wasabi_max_upload_size'])? $storage_settings['wasabi_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['wasabi_storage_validation'])? $storage_settings['wasabi_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';

                }else if($storage_settings['storage_setting'] == 's3'){
                    config(
                        [
                            'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                            'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                            'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                            'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                            'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                            'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                        ]
                    );
                    $max_size = !empty($storage_settings['s3_max_upload_size'])? $storage_settings['s3_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['s3_storage_validation'])? $storage_settings['s3_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';

                }else{
                    $max_size = !empty($storage_settings['local_storage_max_upload_size'])? $storage_settings['local_storage_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['local_storage_validation'])? $storage_settings['local_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';
                }
                $file = $request->$key_name;
                if(count($custom_validation) > 0){
                    $validation =$custom_validation;
                }else{
                    $validation =[
                        'mimes:'.$mimes,
                        'max:'.$max_size,
                    ];
                }
                $validator = Validator::make($request->all(), [
                    $key_name =>$validation
                ]);
                if($validator->fails()){
                    $res = [
                        'flag' => 0,
                        'msg' => $validator->messages()->first(),
                    ];
                    return $res;
                } else {
                    $name = $name;
                    $save = Storage::disk($storage_settings['storage_setting'])->putFileAs(
                        $path,
                        $file,
                        $name
                    );
                    if($storage_settings['storage_setting'] == 'wasabi'){
                        $url = $save;
                    }elseif($storage_settings['storage_setting'] == 's3'){
                        $url = $save;

                    }else{
                        $url ='uploads/'.$save;
                    }
                    $res = [
                        'flag' => 1,
                        'msg'  =>'success',
                        'url'  => $url
                    ];
                    return $res;
                }

            }else{
                $res = [
                    'flag' => 0,
                    'msg' => 'not set configurations',
                ];
                return $res;
            }

        }
        catch(\Exception $e){
            $res = [
                'flag' => 0,
                'msg' => $e->getMessage(),
            ];
            return $res;
        }

    }
}

if(! function_exists('multi_upload_file')){
    function multi_upload_file($request,$key_name,$name,$path,$custom_validation =[]){
        try{
            $storage_settings = getAdminAllSetting();

            if(isset($storage_settings['storage_setting'])){
                if($storage_settings['storage_setting'] == 'wasabi' ){
                    config(
                        [
                            'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                            'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                            'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                            'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                            'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                            'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                        ]
                    );
                    $max_size = !empty($storage_settings['wasabi_max_upload_size'])? $storage_settings['wasabi_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['wasabi_storage_validation'])? $storage_settings['wasabi_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';

                }else if($storage_settings['storage_setting'] == 's3'){
                    config(
                        [
                            'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                            'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                            'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                            'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                            'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                            'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                        ]
                    );
                    $max_size = !empty($storage_settings['s3_max_upload_size'])? $storage_settings['s3_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['s3_storage_validation'])? $storage_settings['s3_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';

                }else{
                    $max_size = !empty($storage_settings['local_storage_max_upload_size'])? $storage_settings['local_storage_max_upload_size']:'2048';
                    $mimes =  !empty($storage_settings['local_storage_validation'])? $storage_settings['local_storage_validation']:'jpeg,jpg,png,svg,zip,txt,gif,docx';
                }

                $file = $request;
                $key_validation = $key_name.'*';
                if(count($custom_validation) > 0){
                    $validation =$custom_validation;
                }else{
                    $validation =[
                        'mimes:'.$mimes,
                        'max:'.$max_size,
                    ];
                }
                $validator = Validator::make(array($key_name=> $request), [
                    $key_validation =>$validation
                ]);
                if($validator->fails()){
                    $res = [
                        'flag' => 0,
                        'msg' => $validator->messages()->first(),
                    ];
                    return $res;
                } else {

                    $name = $name;

                    $save = Storage::disk($storage_settings['storage_setting'])->putFileAs(
                        $path,
                        $file,
                        $name
                    );

                    if($storage_settings['storage_setting'] == 'wasabi'){
                        $url = $save;
                    }elseif($storage_settings['storage_setting'] == 's3'){
                        $url = $save;

                    }else{
                        $url ='uploads/'.$save;
                    }
                    $res = [
                        'flag' => 1,
                        'msg'  =>'success',
                        'url'  => $url
                    ];
                    return $res;
                }

            }else{
                $res = [
                    'flag' => 0,
                    'msg' => 'not set configration',
                ];
                return $res;
            }

        }
        catch(\Exception $e){
            $res = [
                'flag' => 0,
                'msg' => $e->getMessage(),
            ];
            return $res;
        }

    }
}

if(! function_exists('check_file')){
    function check_file($path){

        if(!empty($path)){
            $storage_settings = getAdminAllSetting();
            if( $storage_settings['storage_setting'] == null || $storage_settings['storage_setting'] == 'local'){

                return file_exists(base_path($path));
            }else{

                if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 's3')
                {
                    config(
                        [
                            'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                            'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                            'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                            'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                            'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                            'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                        ]
                    );
                }
                else if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 'wasabi')
                {
                    config(
                        [
                            'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                            'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                            'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                            'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                            'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                            'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                        ]
                    );
                }
                try {
                    return  Storage::disk($storage_settings['storage_setting'])->exists($path);
                } catch (\Throwable $th) {
                    return 0;
                }
            }
        }else{
            return 0;
        }
    }
}

if(! function_exists('get_file')){
    function get_file($path){

        $storage_settings = getAdminAllSetting();

        if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 's3')
        {
            config(
                [
                    'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                    'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                    'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                    'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                    'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                    'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                ]
            );
            return Storage::disk('s3')->url($path);
        }
        else if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 'wasabi')
        {
            config(
                [
                    'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                    'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                    'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                    'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                    'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                    'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                ]
            );

            return Storage::disk('wasabi')->url($path);
        }
        else
        {
            return asset($path);
        }
    }
}
if(! function_exists('get_base_file')){
    function get_base_file($path){
        $admin_settings = getAdminAllSetting();
        if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 's3')
        {
            config(
                [
                    'filesystems.disks.s3.key' => $admin_settings['s3_key'],
                    'filesystems.disks.s3.secret' => $admin_settings['s3_secret'],
                    'filesystems.disks.s3.region' => $admin_settings['s3_region'],
                    'filesystems.disks.s3.bucket' => $admin_settings['s3_bucket'],
                    'filesystems.disks.s3.url' => $admin_settings['s3_url'],
                    'filesystems.disks.s3.endpoint' => $admin_settings['s3_endpoint'],
                ]
            );

            return Storage::disk('s3')->url($path);
        }else if(isset($storage_settings['storage_setting']) && $storage_settings['storage_setting'] == 'wasabi')
        {
            config(
                [
                    'filesystems.disks.wasabi.key' => $admin_settings['wasabi_key'],
                    'filesystems.disks.wasabi.secret' => $admin_settings['wasabi_secret'],
                    'filesystems.disks.wasabi.region' => $admin_settings['wasabi_region'],
                    'filesystems.disks.wasabi.bucket' => $admin_settings['wasabi_bucket'],
                    'filesystems.disks.wasabi.root' => $admin_settings['wasabi_root'],
                    'filesystems.disks.wasabi.endpoint' => $admin_settings['wasabi_url']
                ]
            );
            return Storage::disk('wasabi')->url($path);
        }else{
            return base_path($path);
        }
    }
}
if(! function_exists('delete_file'))
{
    function delete_file($path)
    {
        if(check_file($path))
        {
            $storage_settings = getAdminAllSetting();
            if(isset($storage_settings['storage_setting']))
            {
                    if($storage_settings['storage_setting'] == 'local' )
                    {
                        return File::delete($path);
                    }
                    else
                    {
                        if( $storage_settings['storage_setting'] == 's3')
                        {
                            config(
                                [
                                    'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                                    'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                                    'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                                    'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                                    'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                                    'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                                ]
                            );
                        }
                        else if($storage_settings['storage_setting'] == 'wasabi' ){
                        {
                            config(
                                [
                                    'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                                    'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                                    'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                                    'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                                    'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                                    'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                                ]
                            );
                        }
                        return Storage::disk($storage_settings['storage_setting'])->delete($path);
                    }
                }
            }
        }
    }
}

if(! function_exists('get_size'))
{
    function get_size($url){
        $url=str_replace(' ', '%20', $url);
        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        curl_setopt($ch, CURLOPT_NOBODY, TRUE);

        $data = curl_exec($ch);
        $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

        curl_close($ch);
        return $size;
    }
}
if(! function_exists('delete_folder'))
{
    function delete_folder($path)
    {
        $storage_settings = getAdminAllSetting();
        if(isset($storage_settings['storage_setting']))
        {

            if($storage_settings['storage_setting'] == 'local' )
            {
                if(is_dir(Storage::path($path)))
                {
                    return \File::deleteDirectory(Storage::path($path));
                }
            }
            else
            {
                if( $storage_settings['storage_setting'] == 's3')
                {
                    config(
                        [
                            'filesystems.disks.s3.key' => $storage_settings['s3_key'],
                            'filesystems.disks.s3.secret' => $storage_settings['s3_secret'],
                            'filesystems.disks.s3.region' => $storage_settings['s3_region'],
                            'filesystems.disks.s3.bucket' => $storage_settings['s3_bucket'],
                            'filesystems.disks.s3.url' => $storage_settings['s3_url'],
                            'filesystems.disks.s3.endpoint' => $storage_settings['s3_endpoint'],
                        ]
                    );
                }
                else if($storage_settings['storage_setting'] == 'wasabi' )
                {
                    config(
                        [
                            'filesystems.disks.wasabi.key' => $storage_settings['wasabi_key'],
                            'filesystems.disks.wasabi.secret' => $storage_settings['wasabi_secret'],
                            'filesystems.disks.wasabi.region' => $storage_settings['wasabi_region'],
                            'filesystems.disks.wasabi.bucket' => $storage_settings['wasabi_bucket'],
                            'filesystems.disks.wasabi.root' => $storage_settings['wasabi_root'],
                            'filesystems.disks.wasabi.endpoint' => $storage_settings['wasabi_url']
                        ]
                    );
                }
                return Storage::disk($storage_settings['storage_setting'])->deleteDirectory($path);
            }
        }
    }
}
if (!function_exists('delete_directory'))
{
    function delete_directory($dir)
    {
        if (!file_exists($dir)) {
            return true;
        }

        if (!is_dir($dir)) {
            return unlink($dir);
        }

        foreach (scandir($dir) as $item) {
            if ($item == '.' || $item == '..') {
                continue;
            }

            if (!delete_directory($dir . DIRECTORY_SEPARATOR . $item)) {
                return false;
            }
        }

        return rmdir($dir);
    }
}
if (! function_exists('currency')) {
    function currency($code=null){
        if($code==null){
            $c = Currency::get();
        }else{
            $c = Currency::where('code',$code)->first();
        }
        return $c;
    }
}

// Company Subscription Details
if(! function_exists('SubscriptionDetails'))
{
    function SubscriptionDetails($user_id = null)
    {
        $data = [];
        $data['status'] = false;
        if($user_id != null)
        {
            $user = User::find($user_id);

        }
        elseif(\Auth::check())
        {
            $user = \Auth::user();
        }

        if(isset($user) && !empty($user))
        {
            if($user->type != 'company' && $user->type != 'super admin')
            {
                $user = User::find($user->created_by);
            }

            if(!empty($user))
            {
                if($user->active_plan != 0)
                {
                    $data['status'] = true;
                    $data['active_plan'] = $user->active_plan;
                    $data['billing_type'] = $user->billing_type;
                    $data['plan_expire_date'] = $user->plan_expire_date;
                    $data['active_module'] = ActivatedModule();
                    $data['total_user'] = $user->total_user == -1 ? 'Unlimited': (isset($user->total_user) ? $user->total_user : 'Unlimited');
                    $data['total_workspace'] = $user->total_workspace == -1 ? 'Unlimited': (isset($user->total_workspace) ? $user->total_workspace : 'Unlimited');
                    $data['seeder_run'] = $user->seeder_run;
                }
            }
        }
        return $data;
    }
}


if (!function_exists('PlanCheck')) {
    function PlanCheck($type = 'User', $id = null)
    {
        if (!empty($id)) {
            $user = User::where('id', $id)->first();
            if ($user->type == 'company') {
                $id = $user->id;
            } else {
                $user = User::where('id', $user->created_by)->first();
                $id = $user->id;
            }
        } else {
            $user = \Auth::user();
            if ($user->type == 'company') {
                $id = $user->id;
            } else {
                $user = User::where('id', $user->created_by)->first();
                $id = $user->id;
            }
        }
        if ($type == "User") {
            if ($user->total_user >= 0) {
                if ($user->type == 'company') {
                    $users = User::where('created_by', $id)->where('business_id', getActiveBusiness())->get();
                } else {
                    $users = User::where('created_by', $user->created_by)->get();
                }
                if ($users->count() >= $user->total_user) {
                    return false;
                } else {
                    return true;
                }
            } elseif ($user->total_user < 0) {
                return true;
            }
        }
        if ($type == "Business") {
            if ($user->total_business >= 0) {
                $business = Business::where('created_by', $id)->get();

                if ($business->count() >= $user->total_business) {
                    return false;
                } else {
                    return true;
                }
            } elseif ($user->total_business < 0) {
                return true;
            }
        }
    }
}
if (!function_exists('CheckCoupon'))
{
    function CheckCoupon($code,$price = 0 )
    {
        if(!empty($code) && intval($price) > 0)
        {
            $coupons = Coupon::where('code', strtoupper($code))->where('is_active', '1')->first();
            if(!empty($coupons))
            {
                $usedCoupun     = $coupons->used_coupon();
                $discount_value = ($price / 100) * $coupons->discount;
                $final_price          = $price - $discount_value;

                if($coupons->limit == $usedCoupun)
                {
                    return $price;
                }else{
                    return $final_price;
                }
            }
            else
            {
                return $price;
            }
        }
    }
}

if (!function_exists('UserCoupon'))
{
    function UserCoupon($code,$orderID,$user_id = null)
    {

        if(!empty($code))
        {
            $coupons = Coupon::where('code', strtoupper($code))->where('is_active', '1')->first();
            if($user_id)
            {
                $user = User::find($user_id);
            }
            else
            {
                $user = \Auth::user();
            }
            if(!empty($coupons))
            {
                $userCoupon         = new UserCoupon();
                $userCoupon->user   = $user->id;
                $userCoupon->coupon = $coupons->id;
                $userCoupon->order  = $orderID;
                $userCoupon->save();

                $usedCoupun = $coupons->used_coupon();
                if($coupons->limit <= $usedCoupun)
                {
                    $coupons->is_active = 0;
                    $coupons->save();
                }
            }
        }
    }
}

// if Subscription price is 0 then call this
if(! function_exists('DirectAssignPlan'))
{
    function DirectAssignPlan($plan_id,$duration,$user_module,$counter,$type,$coupon_code = null,$user_id = null)
    {
        $orderID = strtoupper(str_replace('.', '', uniqid('', true)));
        $plan =Plan::find($plan_id);
        if(empty($user_id))
        {
            $user_id = \Auth::user()->id;
        }
        $user = User::find($user_id);
        $assignPlan = $user->assignPlan($plan->id,$duration,$user_module,$counter,$user_id);
        if ($assignPlan['is_success']) {
        $order= Order::create(
                [
                    'order_id' => $orderID,
                    'name' => null,
                    'email' => null,
                    'card_number' => null,
                    'card_exp_month' => null,
                    'card_exp_year' => null,
                    'plan_name' => !empty($plan->name) ? $plan->name :'Basic Package',
                    'plan_id' => $plan->id,
                    'price' => 0,
                    'price_currency' => admin_setting('defult_currancy'),
                    'txn_id' => '',
                    'payment_type' =>!empty($type)?$type:"STRIPE",
                    'payment_status' => 'succeeded',
                    'receipt' => null,
                    'user_id' => $user_id,
                ]
            );
            if($coupon_code){

                UserCoupon($coupon_code,$order);
            }
            return ['is_success' => true];
        }
        else
        {
            return ['is_success' => false];
        }
    }
}
// if (!function_exists('makeEmailLang'))
// {
//     function makeEmailLang($lang)
//     {
//         $templates = EmailTemplate::all();
//         foreach ($templates as $template) {

//             $default_lang  = EmailTemplateLang::where('parent_id', '=', $template->id)->where('lang', 'LIKE', 'en')->first();

//             $emailTemplateLang              = new EmailTemplateLang();
//             $emailTemplateLang->parent_id   = $template->id;
//             $emailTemplateLang->lang        = $lang;
//             $emailTemplateLang->subject     = $default_lang->subject;
//             $emailTemplateLang->content     = $default_lang->content;
//             $emailTemplateLang->variables   = $default_lang->variables;
//             $emailTemplateLang->save();
//         }
//     }
// }
if(! function_exists('error_res')){
    function error_res($msg = "", $args = array())
   {
       $msg       = $msg == "" ? "error" : $msg;
       $msg_id    = 'error.' . $msg;
       $converted = \Lang::get($msg_id, $args);
       $msg       = $msg_id == $converted ? $msg : $converted;
       $json      = array(
           'flag' => 0,
           'msg' => $msg,
       );

       return $json;
   }
}

if(! function_exists('success_res')){
    function success_res($msg = "", $args = array())
   {
       $msg       = $msg == "" ? "success" : $msg;
       $json      = array(
           'flag' => 1,
           'msg' => $msg,
       );

       return $json;
   }
}

if(! function_exists('GetDeviceType'))
{
    function GetDeviceType($user_agent)
    {
        $mobile_regex = '/(?:phone|windows\s+phone|ipod|blackberry|(?:android|bb\d+|meego|silk|googlebot) .+? mobile|palm|windows\s+ce|opera mini|avantgo|mobilesafari|docomo)/i';
        $tablet_regex = '/(?:ipad|playbook|(?:android|bb\d+|meego|silk)(?! .+? mobile))/i';
        if(preg_match_all($mobile_regex, $user_agent))
        {
            return 'mobile';
        }
        else
        {
            if(preg_match_all($tablet_regex, $user_agent)) {
                return 'tablet';
            } else {
                return 'desktop';
            }

        }
    }
}

// Get Cache Size
if(! function_exists('CacheSize'))
{
    function CacheSize()
    {
        //start for cache clear
        $file_size = 0;
        foreach (\File::allFiles(storage_path('/framework')) as $file) {
            $file_size += $file->getSize();
        }
        $file_size = number_format($file_size / 1000000, 4);

        return $file_size;
    }
}

if (! function_exists('get_module_img')) {
    function get_module_img($module){
        $url = url("/Modules/".$module.'/favicon.png');
        return $url;
    }
}

if(! function_exists('sidebar_logo')){
    function sidebar_logo(){
        $admin_settings = getAdminAllSetting();
        if(\Auth::check() && (\Auth::user()->type != 'super admin'))
        {
            $company_settings = getCompanyAllSetting();

            if((isset($company_settings['cust_darklayout']) ? $company_settings['cust_darklayout'] : 'off') == 'on')
            {
                if(!empty($company_settings['logo_light']))
                {
                    if(check_file($company_settings['logo_light']))
                    {
                        return $company_settings['logo_light'];
                    }
                    else
                    {
                        return 'uploads/logo/logo_light.png';
                    }
                }else{
                    if(!empty($admin_settings['logo_light']))
                    {
                        if(check_file($admin_settings['logo_light']))
                        {
                            return $admin_settings['logo_light'];
                        }
                        else
                        {
                            return 'uploads/logo/logo_light.png';
                        }
                    }else{
                        return 'uploads/logo/logo_light.png';
                    }
                }
            }else{
                if(!empty($company_settings['logo_dark'])){
                    if(check_file($company_settings['logo_dark']))
                    {
                        return $company_settings['logo_dark'];
                    }
                    else
                    {
                        return 'uploads/logo/logo_dark.png';
                    }
                }else{
                    if(!empty($admin_settings['logo_dark'])){
                        if(check_file($admin_settings['logo_dark']))
                        {
                            return $admin_settings['logo_dark'];
                        }
                        else
                        {
                            return 'uploads/logo/logo_dark.png';
                        }
                    }else{
                        return 'uploads/logo/logo_dark.png';
                    }

                }
            }
        }
        else
        {
            if((isset($admin_settings['cust_darklayout']) ? $admin_settings['cust_darklayout'] : 'off') == 'on')
            {
                if(!empty($admin_settings['logo_light']))
                {
                    if(check_file($admin_settings['logo_light']))
                    {
                        return $admin_settings['logo_light'];
                    }
                    else
                    {
                        return 'uploads/logo/logo_light.png';
                    }
                }else{
                    return 'uploads/logo/logo_light.png';
                }
            }
            else
            {
                if(!empty($admin_settings['logo_dark'])){
                    if(check_file($admin_settings['logo_dark']))
                    {
                        return $admin_settings['logo_dark'];
                    }
                    else
                    {
                        return 'uploads/logo/logo_dark.png';
                    }
                }else{
                    return 'uploads/logo/logo_dark.png';
                }
            }
        }
    }
}

if(! function_exists('light_logo'))
{
    function light_logo(){
        if(\Auth::check())
        {
            $company_settings = getCompanyAllSetting();
            $logo_light = isset($company_settings['logo_light']) ? $company_settings['logo_light'] : 'uploads/logo/logo_light.png';
        }
        else{
            $admin_settings = getAdminAllSetting();
            $logo_light = isset($admin_settings['logo_light']) ? $admin_settings['logo_light'] : 'uploads/logo/logo_light.png';
        }
        if(check_file($logo_light))
        {
            return $logo_light;
        }
        else
        {
            return 'uploads/logo/logo_dark.png';
        }
    }
}

if(! function_exists('dark_logo')){
    function dark_logo(){
        if(\Auth::check())
        {
            $company_settings = getCompanyAllSetting();
            $logo_dark = isset($company_settings['logo_dark']) ? $company_settings['logo_dark'] :'uploads/logo/logo_dark.png';
        }
        else{
            $admin_settings = getAdminAllSetting();
            $logo_dark = isset($admin_settings['logo_dark']) ? $admin_settings['logo_dark'] :'uploads/logo/logo_dark.png';
        }
        if(check_file($logo_dark))
        {
            return $logo_dark;
        }
        else
        {
            return 'uploads/logo/logo_dark.png';
        }
    }
}

if(! function_exists('currency_format'))
{
    function currency_format($price,$company_id = null,$workspace = null){

        return number_format($price, company_setting('currency_format',$company_id,$workspace), '.', '');
    }
}

if(! function_exists('currency_format_with_sym')){

    function currency_format_with_sym($price,$company_id = null,$workspace = null)
    {
        if(!empty($company_id) && empty($workspace))
        {
            $company_settings = getCompanyAllSetting($company_id);
        }
        elseif(!empty($company_id) && !empty($workspace))
        {
            $company_settings = getCompanyAllSetting($company_id,$workspace);
        }
        else
        {
            $company_settings = getCompanyAllSetting();
        }
        $symbol_position = 'pre';
        $currancy_symbol = '$';
        $format = '1';

        if(isset($company_settings['site_currency_symbol_position']))
        {
            $symbol_position = $company_settings['site_currency_symbol_position'];
        }
        if(isset($company_settings['defult_currancy_symbol']))
        {
            $currancy_symbol = $company_settings['defult_currancy_symbol'];
        }
        if(isset($company_settings['currency_format']))
        {
            $format = $company_settings['currency_format'];
        }
        return ( ( $symbol_position == "pre" )? $currancy_symbol : '').number_format($price, $format). (($symbol_position == "post") ? $currancy_symbol : '');
    }
}

if (! function_exists('company_date_formate')) {
    function company_date_formate($date,$company_id = null,$workspace= null){

        if(!empty($company_id) && empty($workspace))
        {
            $company_settings = getCompanyAllSetting($company_id);
        }
        elseif(!empty($company_id) && !empty($workspace))
        {
            $company_settings = getCompanyAllSetting($company_id,$workspace);

        }
        else{
            $company_settings = getCompanyAllSetting();

        }
        $date_formate = !empty($company_settings['site_date_format']) ? $company_settings['site_date_format'] : 'd-m-y';

        return date($date_formate,strtotime($date));
    }
}

if(! function_exists('super_currency_format_with_sym')){
    function super_currency_format_with_sym($price)
    {
        $admin_settings = getAdminAllSetting();

        $symbol_position = 'pre';
        $symbol = '$';
        $format = '1';
        if(isset($admin_settings['site_currency_symbol_position']) && $admin_settings['site_currency_symbol_position'] == "post")
        {
            $symbol_position = 'post';
        }

        if(isset($admin_settings['defult_currancy_symbol']))
        {
            $symbol = $admin_settings['defult_currancy_symbol'];
        }

        if(isset($admin_settings['currency_format']))
        {
            $format = $admin_settings['currency_format'];
        }
        return ( ($symbol_position == "pre")  ?  $symbol : '').number_format($price, $format) . (( $symbol_position == "post") ?  $symbol : '');
    }
}
if (! function_exists('company_datetime_formate')) {
    function company_datetime_formate($date,$company_id = null,$workspace= null){
        $company_settings = getCompanyAllSetting($company_id,$workspace);
        $date_formate = !empty($company_settings['site_date_format']) ? $company_settings['site_date_format'] : 'd-m-y';
        $time_formate = !empty($company_settings['site_time_format']) ? $company_settings['site_time_format'] : 'H:i';
        return date($date_formate.' '.$time_formate,strtotime($date));
    }
}
if (!function_exists('company_Time_formate')) {
    function company_Time_formate($time, $company_id = null, $workspace = null)
    {
        if (!empty($company_id) && empty($workspace)) {
            $company_settings = getCompanyAllSetting( $company_id);
        } elseif (!empty($company_id) && !empty($workspace)) {
            $company_settings = getCompanyAllSetting( $company_id, $workspace);
        } else {
            $company_settings = getCompanyAllSetting();
        }
        $time_formate = !empty($company_settings['site_time_format']) ? $company_settings['site_time_format'] : 'H:i';
        return date($time_formate, strtotime($time));
    }
}
// module price name
if(! function_exists('ModulePriceByName'))
{
    function ModulePriceByName($module_name)
    {
        static $addons = [];
        static $resultArray = [];
        if(count($addons) == 0 && count($resultArray) == 0 )
        {
            $addons = AddOn::all()->toArray();
            $resultArray = array_reduce($addons, function ($carry, $item) {
                // Check if both "module" and "name" keys exist in the current item
                if (isset($item['module'])) {
                    // Add a new key-value pair to the result array
                    $carry[$item['module']]['monthly_price'] = $item['monthly_price'];
                    $carry[$item['module']]['yearly_price'] = $item['yearly_price'];
                }
                return $carry;
            }, []);
        }

        $module = Module::find($module_name);
        $data = [];
        $data['monthly_price'] = 0;
        $data['yearly_price'] = 0;

        if(!empty($module))
        {
            $path = $module->getPath() . '/module.json';
            $json = json_decode(file_get_contents($path), true);

            $data['monthly_price'] = (isset($json['monthly_price']) && !empty($json['monthly_price'])) ? $json['monthly_price'] : 0;
            $data['yearly_price'] = (isset($json['yearly_price']) && !empty($json['yearly_price'])) ? $json['yearly_price'] : 0;
        }

        if(isset($resultArray))
        {
            $data['monthly_price'] = isset($resultArray[$module_name]['monthly_price']) ? $resultArray[$module_name]['monthly_price'] : $data['monthly_price'];
            $data['yearly_price'] = isset($resultArray[$module_name]['yearly_price']) ? $resultArray[$module_name]['yearly_price'] : $data['yearly_price'];
        }

        return $data;
    }
}
// invoice template Data

if(! function_exists('templateData'))
{
    function templateData()
    {
        $arr              = [];
        $arr['colors']    = [
            '003580',
            '666666',
            '6676ef',
            'f50102',
            'f9b034',
            'fbdd03',
            'c1d82f',
            '37a4e4',
            '8a7966',
            '6a737b',
            '050f2c',
            '0e3666',
            '3baeff',
            '3368e6',
            'b84592',
            'f64f81',
            'f66c5f',
            'fac168',
            '46de98',
            '40c7d0',
            'be0028',
            '2f9f45',
            '371676',
            '52325d',
            '511378',
            '0f3866',
            '48c0b6',
            '297cc0',
            'ffffff',
            '000',
        ];
        $arr['templates'] = [
            "template1" => "New York",
            "template2" => "Toronto",
            "template3" => "Rio",
            "template4" => "London",
            "template5" => "Istanbul",
            "template6" => "Mumbai",
            "template7" => "Hong Kong",
            "template8" => "Tokyo",
            "template9" => "Sydney",
            "template10" => "Paris",
        ];
        return $arr;
    }
}
if(! function_exists('AnnualLeaveCycle'))
{
    function AnnualLeaveCycle()
    {
        $start_date = date('Y-m-d', strtotime(date('Y') . '-01-01 -1 day'));
        $end_date = date('Y-m-d', strtotime(date('Y') . '-12-31 +1 day'));

        $date['start_date'] = $start_date;
        $date['end_date']   = $end_date;

        return $date;

    }
}

if (! function_exists('timeSlot')) {
    function timeSlot($serviceId = null,$date = null)
    {
        $service = Service::find($serviceId);
        $company_settings = getCompanyAllSetting($service->created_by,$service->business_id);
        $maximum_slot = $company_settings['maximum_slot'];
        
        if($date && !empty($service))
        {
            $booked_appointment = Appointment::where('service_id',$serviceId)->where('date',$date)->where('business_id',$service->business_id)->where('created_by',$service->created_by)->select('time')->get()->toArray();
            
            $selectedDate = Carbon::createFromFormat('d-m-Y', $date);
            $dayName = $selectedDate->format('l');                              //get dayname using date
            
            $businessday = BusinessHours::where('created_by',$service->created_by)->where('business_id',$service->business_id)->where('day_name',$dayName)->first();

            $duration = $service->duration;
            $start_time = Carbon::createFromFormat('H:i:s', $businessday->start_time);
            $end_time = Carbon::createFromFormat('H:i:s', $businessday->end_time);
            $break_times = json_decode($businessday->break_hours, true);

            $timeSlots = [];
            $currentSlot = clone $start_time;
            if(is_array($break_times))
            {
                foreach ($break_times as $break) {
                    $breakStart = Carbon::createFromFormat('H:i', $break['start']);
                    $breakEnd = Carbon::createFromFormat('H:i', $break['end']);

                    // Add time slots before the break, excluding booked slots
                    while ($currentSlot->addMinutes($duration)->lt($breakStart)) {
                        $slot = [
                            'start' => $currentSlot->copy()->subMinutes($duration)->format('H:i'),
                            'end' => $currentSlot->format('H:i'),
                        ];

                        $bookedCount = isSlotBooked($slot, $booked_appointment);
                        if ($bookedCount < $maximum_slot) {
                            $timeSlots[] = $slot;
                        }
                    }

                    // Skip time slots during the break
                    if ($currentSlot->lte($breakEnd)) {
                        $currentSlot = $breakEnd->copy();
                    }
                }
            }

            // Add remaining time slots after the last break, excluding booked slots
            while ($currentSlot->addMinutes($duration)->lte($end_time)) {
                $slot = [
                    'start' => $currentSlot->copy()->subMinutes($duration)->format('H:i'),
                    'end' => $currentSlot->format('H:i'),
                ];

                $bookedCount = isSlotBooked($slot, $booked_appointment);
                if ($bookedCount < $maximum_slot) {
                    $timeSlots[] = $slot;
                }
            }


            return $timeSlots;
        }
    }
}

if (! function_exists('isSlotBooked')) {
    function isSlotBooked($slot, $bookedAppointments){
        $currentStart = Carbon::createFromFormat('H:i', $slot['start']);
        $currentEnd = Carbon::createFromFormat('H:i', $slot['end']);

        $count = 0;

        foreach ($bookedAppointments as $bookedSlot) {
            // Extract start and end times from the booked slot string
            [$bookedStartTime, $bookedEndTime] = explode('-', $bookedSlot['time']);

            $bookedStart = Carbon::createFromFormat('H:i', $bookedStartTime);
            $bookedEnd = Carbon::createFromFormat('H:i', $bookedEndTime);

            // Check if the current slot overlaps with any booked slot
            if (($currentStart->gte($bookedStart) && $currentStart->lt($bookedEnd)) ||
                ($currentEnd->gt($bookedStart) && $currentEnd->lte($bookedEnd))) {
                    $count++;

                // return true; // Slot is booked
            }
        }
        return $count;
        // return false; // Slot is not booked

    }
}

if (! function_exists('EmbeddedCode')) {
    function EmbeddedCode(){
        $business = Business::find(getActiveBusiness());
        $route = route('appointments.form',$business->slug);

        return '<iframe src="'.$route.'" width="100%" height="700px"></iframe>';
    }
}



Anon7 - 2021