<?php

namespace App\Repositories;
use Illuminate\Support\Str;

use App\Models\BusinessDesignSettings;
use Illuminate\Filesystem\Filesystem;

class BusinessDesignSettingsRepository
{
    public function __construct(
        BusinessDesignSettings $businessDesignSettings,
        CommunitySpaceUsedRepository $communitySpaceUsedRepository,
		PhotoRepository $photoRepository,
        Filesystem $filesystem
    ) {
        $this->model = $businessDesignSettings;
        $this->communitySpaceUsedRepository = $communitySpaceUsedRepository;
		$this->photoRepository=$photoRepository;
        $this->file = $filesystem;
    }

    public function add($val, $page)
    {
        $expected = [
            'banner1_heading' => '',
            'banner1_texts1' => '',
            'banner1_texts2' => '',
            'banner1_button_text' => '',
            'banner1_button_link' => '',
            'banner2_heading' => '',
            'banner2_texts1' => '',
            'banner2_texts2' => '',
            'banner2_button_text' => '',
            'banner2_button_link' => '',
            'banner3_heading' => '',
            'banner3_texts1' => '',
            'banner3_texts2' => '',
            'banner3_button_text' => '',
            'banner3_button_link' => '',
            'show_adv_banner' => '',
            'show_category_banner' => '',
            'show_gallery_menu' => '',
            'show_about_menu' => '',
            'show_contact_menu' => '',
            'show_shop_menu' => '',
            'show_blog_menu' => '',
            'show_reviews_menu' => '',
			'show_default_banner' => '',
			'about_texts'=>'',
			'primary_bg_color'=>'',
			'primary_texts_color'=>'',
			'cart_button_bg_color'=>'',
			'cart_button_texts_color'=>'',
        ];

        extract(array_merge($expected, $val));

        $filePath = 'uploads/community/'.$page->community_id.'/business';
        $CDNRepository = app('App\\Repositories\\CDNRepository');

        $settings = $this->getByBusinessId($page->id);

        if (! $settings) {
            $settings = $this->model->newInstance();
            $settings->business_id = $page->id;
        }

        $upload_community_id = $page->community_id;
        $upload_key = Str::random(20);
        $sub_type_id = $page->id;
        $upload_type = 'business-theme2-banner';

        if (request()->hasFile('product_image1')) {
            $product_image1 = request()->file('product_image1');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();

            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {
                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->banner1_image = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        if (request()->hasFile('product_image2')) {
            $product_image1 = request()->file('product_image2');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();

            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {
                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->banner2_image = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        if (request()->hasFile('product_image3')) {
            $product_image1 = request()->file('product_image3');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();
            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {

                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->banner3_image = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        $settings->user_id = \Auth::user()->id;
        $settings->banner1_heading = trim($banner1_heading);
        $settings->banner1_texts1 = trim($banner1_texts1);
        $settings->banner1_texts2 = trim($banner1_texts2);
        $settings->banner1_button_text = trim($banner1_button_text);
        $settings->banner1_button_link = trim($banner1_button_link);
        $settings->banner2_heading = trim($banner2_heading);
        $settings->banner2_texts1 = trim($banner2_texts1);
        $settings->banner2_texts2 = trim($banner2_texts2);
        $settings->banner2_button_text = trim($banner2_button_text);
        $settings->banner2_button_link = trim($banner2_button_link);
        $settings->banner3_heading = trim($banner3_heading);
        $settings->banner3_texts1 = trim($banner3_texts1);
        $settings->banner3_texts2 = trim($banner3_texts2);
        $settings->banner3_button_text = trim($banner3_button_text);
        $settings->banner3_button_link = trim($banner3_button_link);
        $settings->show_adv_banner = $show_adv_banner;
        $settings->show_category_banner = $show_category_banner;
        $settings->show_gallery_menu = $show_gallery_menu;
        $settings->show_about_menu = $show_about_menu;
        $settings->show_contact_menu = $show_contact_menu;
        $settings->show_shop_menu = $show_shop_menu;
        $settings->show_blog_menu = $show_blog_menu;
        $settings->show_reviews_menu = $show_reviews_menu;		
		$settings->show_default_banner = $show_default_banner;
		$settings->why_section_texts=$about_texts;
		
		$settings->primary_bg_color=$primary_bg_color;
		$settings->primary_texts_color=$primary_texts_color;
		$settings->cart_button_bg_color=$cart_button_bg_color;
		$settings->cart_button_texts_color=$cart_button_texts_color;

        $settings->save();

        return $settings;
    }

    public function getByBusinessId($business_id)
    {
        $cacheKey = 'business_design_settings_by_business_' . $business_id;
        
        return \Cache::remember($cacheKey, now()->addMonth(), function () use ($business_id) {
            return $this->model->where('business_id', $business_id)->first();
        });
    }
	
	public function addTheme($val, $page)
    {
        $expected = [            
            'show_default_banner' => '',
			'about_texts'=>''
        ];

        extract(array_merge($expected, $val));

        $filePath = 'uploads/community/'.$page->community_id.'/business';
        $CDNRepository = app('App\\Repositories\\CDNRepository');

        $settings = $this->getByBusinessId($page->id);

        if (! $settings) {
            $settings = $this->model->newInstance();
            $settings->business_id = $page->id;
        }

        $upload_community_id = $page->community_id;
        $upload_key = Str::random(20);
        $sub_type_id = $page->id;
        $upload_type = 'business-theme2-banner';

        if (request()->hasFile('product_image1')) {
            $product_image1 = request()->file('product_image1');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();

            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {
                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->default_banner1 = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        if (request()->hasFile('product_image2')) {
            $product_image1 = request()->file('product_image2');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();

            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {
                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->default_banner2 = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        if (request()->hasFile('product_image3')) {
            $product_image1 = request()->file('product_image3');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();
            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {

                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->default_banner3 = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }
		
		if (request()->hasFile('product_image4')) {
            $product_image1 = request()->file('product_image4');
            $this->file->makeDirectory(public_path().'/'.$filePath, 0777, true, true);
            $fileExt1 = $product_image1->getClientOriginalExtension();
            $file_original_ext = $fileExt1;
            $file_original_name = $product_image1->getClientOriginalName();
            $file_original_size = $product_image1->getSize();

            if (checkAvailableSpace($upload_community_id, $file_original_size) != 0) {

                $fileName1 = md5($product_image1->getClientOriginalName().time()).'.'.strtolower($fileExt1);
                $product_image1_path = $filePath.'/'.$fileName1;

                $product_image1->move(public_path().'/'.$filePath, $fileName1);

                $uploadPath1 = $filePath.'/'.$fileName1;
                $newFileName1 = $CDNRepository->upload(public_path().'/'.$uploadPath1, $uploadPath1);

                $CDNRepository->deleteThisFile(public_path().'/'.$product_image1_path);
                $settings->why_section_image = $newFileName1;
                $settings->save();

                $fileArray = [
                    'community_id' => $upload_community_id,
                    'user_id' => \Auth::user()->id,
                    'file_path' => $newFileName1,
                    'file_name' => $file_original_name,
                    'file_type' => $file_original_ext,
                    'file_size' => $file_original_size,
                    'uploaded_date' => date('Y-m-d'),
                    'type' => $upload_type,
                    'type_id' => 0,
                    'sub_type_id' => $sub_type_id,
                    'upload_key' => $upload_key,
                ];
                $this->communitySpaceUsedRepository->save($fileArray);
            }
        }

        $settings->user_id = \Auth::user()->id;        
        $settings->show_default_banner = $show_default_banner;
		$settings->why_section_texts=$about_texts;
        $settings->save();

        return $settings;
    }
	
	public function saveSettingsImgs($page,$data,$type)
    {
	    $response = [
            'code' => 0,
            'message' => 'Error',
            'url' => '',
        ];
		
	 	$settings = $this->getByBusinessId($page->id);

        if (! $settings) {
            $settings = $this->model->newInstance();
            $settings->business_id = $page->id;
			$settings->user_id = \Auth::user()->id;   
			$settings->save();   
        }
			
			
		$CDNRepository = app('App\\Repositories\\CDNRepository');
		
		$img_url = 'uploads/community/'.$page->community_id.'/business';
		  
		if (! empty($data)) {
            try {
                
                // $extension = explode('/', mime_content_type($data))[1];
                $fileData = $data;

                $data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
                $img_name = Str::random(32).'.png';
                              
                if (! is_dir(public_path('/').$img_url)) {
                    mkdir(public_path('/').$img_url, 0777, true);
                }
                file_put_contents(public_path('/').$img_url.'/'.$img_name, $data);

                $file_original_ext = explode(';', explode('/', $fileData)[1])[0];
                $file_original_name = $img_name;
                $file_original_size = filesize(public_path('/').$img_url.'/'.$img_name);

                $img = $img_url.'/'.$img_name;

                if (checkAvailableSpace($page->community_id, $file_original_size) == 0) {
                    $this->photoRepository->deleteFilesFromLocal($img);

                    return json_encode([
                        'code' => 0,
                        'status' => 'error',
                        'message' => 'No sufficient space available to upload.',
                    ]);
                }

                $img = $img_url.'/'.$img_name;
                $img = ltrim($img, '/');
				                    
				$newFileName = $CDNRepository->upload(public_path().'/'.$img, $img);
				$CDNRepository->deleteThisFile(public_path().'/'.$img);
				$image = $newFileName;
				
				$response['code'] = 1;
				$response['status'] = 'success';
				$response['message'] = 'image uploaded successfully';
				$response['url'] = \Image::url($image, 200);

				if($type=='why_section_image'){
					$settings->why_section_image=$image;
					$settings->save();
				}elseif($type=='banner1_image'){
					$settings->banner1_image=$image;
					$settings->save();
				}elseif($type=='banner2_image'){
					$settings->banner2_image=$image;
					$settings->save();
				}elseif($type=='banner3_image'){
					$settings->banner3_image=$image;
					$settings->save();
				}	
		
				$fileArray = [
					'community_id' => $page->community_id,
					'user_id' => \Auth::user()->id,
					'file_path' => $image,
					'file_name' => $file_original_name,
					'file_type' => $file_original_ext,
					'file_size' => $file_original_size,
					'uploaded_date' => date('Y-m-d'),
					'type' => 'business-theme2-logo',
					'type_id' => 0,
					'sub_type_id' => $page->id,
					'upload_key' => Str::random(20),
				];
				$this->communitySpaceUsedRepository->save($fileArray);         

            } catch (\Exception $e) {
                return json_encode([
                    'status' => 'error',
                    'message' => $e->getMessage(),
                ]);
            }
        } else {
            return json_encode([
                'status' => 'error',
                'message' => 'Error things',
            ]);
        }

        return json_encode($response);
	}
	
	public function addChamberStoreTheme($page)
    {
        $settings = $this->getByBusinessId($page->id);
        if (! $settings) {
            $settings = $this->model->newInstance();
            $settings->business_id = $page->id;
        }

        $settings->user_id = $page->user_id;
        $settings->show_adv_banner = 0;
        $settings->show_category_banner = 0;
        $settings->show_gallery_menu = 0;
        $settings->show_about_menu = 0;
        $settings->show_contact_menu = 0;
        $settings->show_shop_menu = 1;
        $settings->show_blog_menu = 0;
        $settings->show_reviews_menu = 1;		
		$settings->show_default_banner = 0;
		$settings->primary_bg_color="#bfbfbf";
		$settings->primary_texts_color="#ffffff";
		$settings->cart_button_bg_color="#ff0000";
		$settings->cart_button_texts_color="#ffffff";
        $settings->save();
        return $settings;
    }
}