<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Web\BaseController as BaseController;
use App\Http\Helpers\PageUtility;
use Illuminate\Http\Request;

use Illuminate\Support\Facades\Storage;

use App\Lib\Core\Core;
use App\Http\Helpers\ProductUtility;
use App\Http\Helpers\ProductTypeUtility;
use App\Models\WishlistCart;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;

class z_ProductController extends BaseController
{
    public $className;
    public $class_id;
    public $defDataArr;

    public function __construct()
    {
        $classNameArr = explode('\\', __CLASS__);
        $this->className = end($classNameArr);
        $this->class_id = self::getClassIdByname($this->className);

        $this->defDataArr = self::getDefData();
    }

    public function index(Request $request, $slug)
    {
        $product = ProductUtility::data(['slug' => $slug, 'with' => ['categories','coverfile','files', 'compositions', 'styles', 'properties']]);
        // dd($product);
        if (!empty($product)) {
            $category_in_arr = [];
            foreach ($product->categories as $key => $category) {
                array_push($category_in_arr, $category->c_id);
            }
            $dataArr = $product->toArray();
            $dataArr['full_url'] = $request->fullUrl();

            $meta_title = $dataArr['meta_title'];
            $dataArr['meta_title'] = $meta_title != '' ? strip_tags($meta_title) : strip_tags($dataArr['title']);

            $imageFolderPath = Core::getUploadedURL(Config('commonconstants.product_dir_name'));

            $pageDataArr = PageUtility::data( ['class_id' => self::getClassIdBymodel('Page'), 'page_id' => 11] );
            if (empty($pageDataArr)) {
                return abort(404);
            }
            
            $dataArr = array_merge($dataArr, Arr::only($pageDataArr, ['image_path', 'image_alt', 'image_title', 'custom_fields']));

            $relatedItems = ProductUtility::list(['not_in_id_arr'=>[$dataArr['prod_id']],'category_in_arr'=>$category_in_arr,'inRandomOrder' => 1, 'take' => 12]);
            // $relatedItems = ProductUtility::list(['not_in_id_arr'=>[$dataArr['prod_id']],'inRandomOrder' => 1, 'take' => 12]);

            $defDataArr = array_merge($this->defDataArr, ProductUtility::getMediaAttrbutes(), ['event_types'=>ProductUtility::getEventTypeAssoc()]);
            // dd($defDataArr);

            return view('themes.frontend.pages.product.index', compact('product','defDataArr', 'dataArr', 'relatedItems'));
        }
        return abort(404);
    }


    // public function addToWishList(Request $request)
    // {
    //     $productCode = $request->input('product_code');

    //     $product = config('products.' . $productCode);

    //     $cart = session()->get('cart', []);
    //     if (isset($cart[$productCode])) {
    //         $cart[$productCode]['quantity']++;
    //     } else {
    //         $cart[$productCode] = [
    //             "name" => $product['name'],
    //             "code" => $product['code'],
    //             "quantity" => 1,
    //             "price" => $product['price'],
    //             "image" => $product['image_path']
    //         ];
    //     }
    //     session()->put('cart', $cart);

    //     return response()->json(['success' => true]);
    // }

    public function addToWishList(Request $request, $slug)
    {
        // WishlistCart::clearWishlist();
        // $wishlist_cart = session()->get('wishlist_cart', []);
        // $wishlist_cart_products = session()->get('wishlist_cart_products', []);

        // dd($wishlist_cart);

        $product = ProductUtility::data(['slug' => $slug, 'with' => ['inventories']]);

        if (!$product) {
            abort(404);
        }

        try {

            $frontconstants = Config('frontconstants');
    
            $messageLang = __('message');
            $webLang = __('web');
    
            $session_id = session()->getId();
            // dd($request->all());
    
            $wishlist_cart = session()->get('wishlist_cart', []);
            $wishlist_cart_products = session()->get('wishlist_cart_products', []);
            // dd($session_id);
    
            $f_name = $l_name = $email = $mobile = $venue_name = $address = $apartment = $city = $state = $pincode = $country = $message = $event_start_at = $event_end_at = null;
            $total_products = 1;
            // if (session()->get('package_id')){
    
            // }
            $wishlist_cart = [
                "user_id" => self::getLoggedInUserId() ?? null,
                "session_id" => $session_id,
                "f_name" => $f_name,
                "l_name" => $l_name,
                "email" => $email,
                "mobile" => $mobile,
                "venue_name" => $venue_name,
                "address" => $address,
                "apartment" => $apartment,
                "city" => $city,
                "state" => $state,
                "pincode" => $pincode,
                "country" => $country,
                "message" => $message,
                "total_products" => $total_products,
                "event_start_at" => $event_start_at,
                "event_end_at" => $event_end_at
            ];
    
            //add wishlist_cart_products
            $uniqueProductIdentifier = $product->prod_id.'__'.$request->event_date;
            if (isset($wishlist_cart_products[$uniqueProductIdentifier])) {
                //update quantity
                $wishlist_cart_products[$uniqueProductIdentifier]['quantity'] = (int) $request->quantity + $wishlist_cart_products[$uniqueProductIdentifier]['quantity'];
            }else{
                $wishlist_cart_products[$uniqueProductIdentifier] =  [
                    "session_id" => $session_id,
                    "product_id" => $product->prod_id,
                    "product_name" => $product->title,
                    "sku" => $product->inventories->first()->sku,
                    "event_type_id" => $request->event_type,
                    "event_date" => $request->event_date,
                    "event_time" => $request->event_time,
                    "quantity" => $request->quantity
                ];
            }
            // dd($wishlist_cart_products);
            if ($wishlist_cart_products) {
                //add new wishlist_cart
                $wishlist_cart['total_products'] = count($wishlist_cart_products);
                // $wishlist_cart_products[$product->prod_id]['cart_id'] = 1;
            }
            if ($wishlist_cart_products[$uniqueProductIdentifier]) {
                //update quantity
                $wishlist_cart_products[$uniqueProductIdentifier]['quantity'] = (int) $request->quantity + $wishlist_cart_products[$uniqueProductIdentifier]['quantity'];
            }
    
            session()->put('wishlist_cart', $wishlist_cart);
            session()->put('wishlist_cart_products', $wishlist_cart_products);

            print_r($wishlist_cart);

            dd($wishlist_cart_products);
    
            //save to database
            WishlistCart::saveWishlistCart();
    
            // session()->put('cart', $cart);
            if (request()->wantsJson()) {
                return response()->json(['message' => $messageLang['success']['add_wish_product']]);
            }
    
            return redirect()->back()->with('alert', $frontconstants['alert_css']['1'])->with('message', $messageLang['success']['add_wish_product'])->with('title', $webLang['success_ttl']);
        } catch (\Throwable $th) {
            if (request()->wantsJson()) {
                return response()->json(['msg' => 'error','message' => $messageLang['error']['refresh_try_again_contact'].$th->getMessage()]);
            }            
            return redirect()->route('web.forgot.password')->with('alert', $frontconstants['alert_css']['2'])->with('message', $messageLang['error']['refresh_try_again_contact'])->with('title', $webLang['error_ttl']);
        }
    }

}
