<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Api;
use App\ApiUser;
use App\ShippingCity;
use App\Template;
use Illuminate\Support\Facades\Http;
use DB;
use App\OrderStatus;
use Auth;
use App\AirwayBill;
use File;
use App\Order;
use App\OrderCustomerDetail;
use App\OrderItem;
use App\OrderComment;
use App\OrderToken;
use Validator;
use Rap2hpoutre\FastExcel\FastExcel;

class BookingController extends Controller
{

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {  
        $orderItems = array();
        $order = array();
        $apiId = NULL;
        $api = NULL;
        $emailAddress = NULL;
        // $cust_phone_number = "";

        if ($request->has('order')) {
            try {
                $client = new \GuzzleHttp\Client();
    
                $response = $client->request('GET', 'https://connector.ecompk.com/api/fetch_custom_order?order_name='.$request->order, []);
    
                $result = $response->getBody()->getContents();
            }catch(\Exception $e) {
                $result = $e->getMessage();
            }

            $decodedResult = json_decode($result, true);
            
            if(empty($decodedResult)){
                return back()->with('error','Invalid or empty order number. Please insert an appropriate order number');
            }

            $checkOrder = DB::table('orders')->where('order_id', $decodedResult['order']['order_id'])->first();
            
            if(is_null($checkOrder)){
                // if($decodedResult['order']['tags'] != 'In Process' || $decodedResult['order']['tags'] != 'Partially Shipped' || $decodedResult['order']['tags'] != 'Shipped'){
                //     return back()->with('error','Order status must be in process or partially shipped');
                // }

                $createOrder = DB::table('orders')->insertGetId([
                    'order_id' => $decodedResult['order']['order_id'], 'order_number' => $decodedResult['order']['order_number'], 'order_name' => $decodedResult['order']['order_name'], 'tags' => $decodedResult['order']['tags'], 'status' => $decodedResult['order']['tags'], 'shipping_method' => $decodedResult['order']['shipping_method'], 'gateway' => $decodedResult['order']['gateway'], 'payment_method' => $decodedResult['order']['gateway'], 'subtotal' => $decodedResult['order']['subtotal_price'], 'shipping_amount' => $decodedResult['order']['shipping_rates'],  'tax_amount' => $decodedResult['order']['total_tax'], 'taxes_included' => $decodedResult['order']['taxes_included'], 'discount_amount' => $decodedResult['order']['total_discounts'], 'currency' => $decodedResult['order']['currency'], 'financial_status' => $decodedResult['order']['financial_status'], 'fulfillment_status' => $decodedResult['order']['fulfillment_status'], 'total_line_items_price' => $decodedResult['order']['total_line_items_price'], 'total_price' => $decodedResult['order']['total_price'], 'total_weight' => $decodedResult['order']['total_weight'], 'connector_status' => $decodedResult['order']['connector_status']
                ]);

                $createCustomerDetails = DB::table('order_customer_details')->insert([
                    'parent_id' => $createOrder, 'name' => $decodedResult['shippingDetails']['first_name'].' '.$decodedResult['shippingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $decodedResult['shippingDetails']['phone'], 'address' => $decodedResult['shippingDetails']['address1'].''.$decodedResult['shippingDetails']['address2'], 'city' => $decodedResult['shippingDetails']['city'], 'country_code' => $decodedResult['shippingDetails']['country_code'], 'postcode' => $decodedResult['shippingDetails']['zip'], 'zip' => $decodedResult['shippingDetails']['zip'], 'country' => $decodedResult['shippingDetails']['country_code'], 'type' => 'shipping', 'created_at' => now(), 'updated_at' => now()
                ]);

                if(!is_null($decodedResult['billingDetails'])){
                    $billing_customer_phone = str_replace('+92', '0', $decodedResult['billingDetails']['phone']);
                    $createCustomerDetailsBilling = DB::table('order_customer_details')->insert([
                        'parent_id' => $createOrder, 'name' => $decodedResult['billingDetails']['first_name'].' '.$decodedResult['billingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $billing_customer_phone, 'address' => $decodedResult['billingDetails']['address1'].''.$decodedResult['billingDetails']['address2'] , 'city' => $decodedResult['billingDetails']['city'], 'country_code' => $decodedResult['billingDetails']['country_code'], 'postcode' => $decodedResult['billingDetails']['zip'], 'zip' => $decodedResult['billingDetails']['zip'], 'country' => $decodedResult['billingDetails']['country_code'], 'type' => 'billing', 'created_at' => now(), 'updated_at' => now()
                    ]);
                } else {
                    $shipping_customer_phone = str_replace('+92', '0', $decodedResult['shippingDetails']['phone']);
                    $createCustomerDetailsBilling = DB::table('order_customer_details')->insert([
                        'parent_id' => $createOrder, 'name' => $decodedResult['shippingDetails']['first_name'].' '.$decodedResult['shippingDetails']['last_name'], 'email' => $decodedResult['customerDetails']['email'], 'phone' => $shipping_customer_phone, 'address' => $decodedResult['shippingDetails']['address1'].''.$decodedResult['shippingDetails']['address2'] , 'city' => $decodedResult['shippingDetails']['city'], 'country_code' => $decodedResult['shippingDetails']['country_code'], 'postcode' => $decodedResult['shippingDetails']['zip'], 'zip' => $decodedResult['shippingDetails']['zip'], 'country' => $decodedResult['shippingDetails']['country_code'], 'type' => 'billing', 'created_at' => now(), 'updated_at' => now()
                    ]);
                }

                $firstComment = 'Order dropped in custom panel at '.now().' <br>(Automated message from cp.makeupcityshop.com)';

                $createCommnets = OrderComment::create([
                    'parent_id' => $createOrder, 'comment' => $firstComment, 'status' => $decodedResult['order']['tags']
                ]);

                foreach($decodedResult['itemData'] as $itemData){
                    $orderedQty = $itemData['quantity'];

                    $createItems = DB::table('order_items')->insert([
                        'parent_id' => $createOrder, 'item_id' => $itemData['product_id'], 'product_id' => $itemData['product_id'], 'order_product_id' => $itemData['order_product_id'], 'sku' => $itemData['sku'], 'title' => $itemData['title'], 'item_name' => $itemData['name'], 'upc' => $itemData['upc'], 'vendor' => $itemData['vendor'], 'color' => $itemData['color'], 'size' => $itemData['size'], 'brand_id' => 1, 'qty_ordered' => $orderedQty, 'base_price' => $itemData['price'], 'compare_at_price' => $itemData['compare_at_price'], 'base_discount_amount' => 0, 'base_tax_amount' => 0, 'base_row_total' => $itemData['price']*$orderedQty, 'remarks' => 'N/A', 'qty_confirmed' => 0, 'product_image_url' => $itemData['product_image_url'], 'created_at' => now()
                    ]);
                }

                // $firstComment = 'Order dropped in custom panel at '.now().' <br>(Automated message from cp.makeupcityshop.com)';

                // try {
                //     $client = new \GuzzleHttp\Client();
        
                //     $response = $client->request('GET', 'https://connector.ecompk.com/api/addordercomment?order_id='.$decodedResult['orderData']['entity_id'].'&comment='.$firstComment, []);
        
                //     $result = $response->getBody()->getContents();
                // }catch(\Exception $e) {
                //     $result = $e->getMessage();
                // }

                // $createCommnets = OrderComment::create([
                //         'parent_id' => $createOrder->id, 'comment' => $firstComment, 'status' => $decodedResult['orderData']['status']
                // ]);
            }
            
            $order = Order::where('orders.order_name', $request->order)
            ->join('order_customer_details', 'order_customer_details.parent_id', 'orders.id')
            ->select(
                'orders.id as id', 'orders.order_id', 'orders.status as status', 'orders.shipping_amount', 'orders.subtotal', 'orders.subtotal', 'orders.tax_amount','orders.total_line_items_price', 'orders.discount_amount', 'orders.payment_method',
                'order_customer_details.city as customer_city', 'order_customer_details.name as customer_name', 'order_customer_details.email as customer_email', 'order_customer_details.address as customer_address', 'order_customer_details.phone as customer_phone',
                'order_customer_details.country_code as country_code', 'order_customer_details.country as country', 'order_customer_details.postcode as postcode'
            )
            ->first();
            
            if($order->status == 'Shipped'){
                return back()->with('error','Order marked as COD Shipped.');
            }

            if($order->status == 'codshipped'){
                return back()->with('error','Order marked as COD Shipped.');
            }

            if(!in_array($order->status, array('In Process', 'Partially Shipped', 'Shipped'))){
                return back()->with('error','Set order in process to book');
            }

            $apiId = null;
            $api = null;

            if($order->shipping_courier != 'DHL - Express worldwide'){
                if(!getBookingApi(Auth::user()->id, $order->customer_city)){
                    return back()->with('error','City '.$order->customer_city.' not assigned to any API');
                }

                $apiId = getBookingApi(Auth::user()->id, $order->customer_city);

                $api = Api::where('id', $apiId)->first();
            }

            
            $orderItems = DB::table('order_items')->where('parent_id', $order->id)
            ->select(
                'sku as item_sku', 'weight as item_weight', 'qty_confirmed', 'qty_ordered as item_quantity_ordered', 'item_id', 'brand_id', 'base_row_total as item_row_total', 'base_price as item_price', 'base_tax_amount as item_tax_amount', 'base_discount_amount as item_discount_amount', 'upc', 'hscode', 'international_row_total', 'item_name', 'order_product_id'
            )
            ->get();
            
        }
        
        return view('modules.booking.index', compact('order', 'orderItems', 'apiId', 'api', 'emailAddress'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {   
	
        $request->request->add((['order_number' => strtoupper($request->order_number)]));
        
        $getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

        if(!is_null($getToken)){
            return redirect('booking')->with('error','Order already processed please check shipments for more details');
        }

        // $insertToken = OrderToken::create([
        //     'order_number' => $request->order_number,
        //     'token' => $request->order_token
        // ]);

        if($request->order_shipping_method == 'DHL'){
            echo 'DHL';
            die;
        }
        
        $api = Api::where('id', '12')->first();
                $api_user = ApiUser::where([['user_id', getLoggedInUserId()], ['api_id', $api->id]])->first();

        // Check city and get Name/Code or die if city not found
        if(!getCityNameOrCode($request->destination_city, $api->id)){
            return back()->with('error','City not found');
        }

        $cityNameOrCode = getCityNameOrCode($request->destination_city, $api->id);
        
        $request->request->add((['customer_city' => $cityNameOrCode]));
        
        // Checking if Key Fields has headers variables and replacing them according to user logged in
        $headers = [];

        if($api->headers != '{}'){
            $decodedApiHeaders = json_decode($api->headers, true);
            $decodedUserHeaderValues = json_decode($api_user->key_values, true);

            foreach($decodedApiHeaders as $key => $value){
                if (array_key_exists($value, $decodedUserHeaderValues)){
                    $decodedApiHeaders[$key] = $decodedUserHeaderValues[$decodedApiHeaders[$key]];
                }
            }

            $headers = $decodedApiHeaders;
        }

        // Replacing post array variables with respect to customer order details
        $decodedApiBody = json_decode($api->body, true);

  
print_r($decodedApiBody);die;      
        $postArray = [];

        foreach($decodedApiBody as $key => $value){
            $postArray[$key] = $value;

            if($request->has(str_replace(array('{', '}'), '', $value))){
                $postArray[$key] = $request->input(str_replace(array('{', '}'), '', $value));
            }
        }
        

        // Checking if Key Fields has body variables and replacing them according to user logged in
        foreach($postArray as $key => $value){
            //echo $key.':'.$value.'<br>';
            $decodedApiBodyValues = json_decode($api_user->key_values, true);
        
            if (array_key_exists($value, $decodedApiBodyValues)){
                $postArray[$key] = $decodedApiBodyValues[$value];
            }
        }
 
        // Computing weight, pieces and product details
        $requestBodies = computePackageDetails($request, $postArray);
	   
	//print_r($requestBodies);die;
        $cn_number = [];
        $awbs = [];
        
        $citiesForLabel = array(
            '1' => array('originCityName', 'destinationCityName'),
            '3' => array('origin_city', 'destination_city'),
            '6' => array('OriginCityId', 'DestCityId'),
            '4' => array('consignee_city_id'),
            '7' => array('delivery_city'),
	    '9' => array('cityName'),
	     '11' => array('CONSIGNEE_CITY'),
        );

        $serviceIndex = array_search('{api_service}', $decodedApiBody);
        
        if($serviceIndex){
            $serviceForLabel = array(
                $api->id => json_decode($api->extra_fields, true)['api_service'],
            );
        }
        
        $cityNames = [];

// print_r($requestBodies);die;
        // Checking if API is SOAP or RESTFull
        foreach($requestBodies as $key => $_body){
            if($api->type == 'REST'){
                $cn_number[$key] = get_response($api->name, rest_request($api->method, $api->url, $headers, $_body));
            }elseif($api->type == 'SOAP'){
                $cn_number[$key] = get_response($api->name, soap_request($api->method, $api->url, $headers, $_body));
            }
            
            $airway = Template::where([['api_id', $api->id], ['type', 'airway label']])->first();

            $keys = [];
            $values = [];

            $_body['date_now'] = date('Y-m-d', strtotime(now()));
            $_body['time_now'] = date('H:i:s', strtotime(now()));
            $_body['package'] = ($key+1) .' / '. count($requestBodies);
            $_body['key'] = $key;
            // $cn_number[$key] = rand();
            $_body['cn_number'] = $cn_number[$key];
            
//testing
//print_r($_body);
//die();
            if($api->id == 9){
                $item_weight = array_sum($request->item_weight);
                $pieces = array_sum($request->quantity_confirmed);

                $user_values = json_decode($api_user->key_values, true);
                $shipper_address = $user_values['{shipper_address}'];
                $shipper_name = $user_values['{shipper_name}'];
                $origin_city = $user_values['{origin_city}'];

                $_body['weight'] = $item_weight;
                $_body['pieces'] = $pieces;
                $_body['shipper_address'] = $shipper_address;
                $_body['shipper_name'] = $shipper_name;
                $_body['origin_city'] = $origin_city;
                
                $phone = substr($_body['customerPhone'], 0, 2);
                if($phone == '92'){
                    $getPhone = DB::table('orders')->where('order_number', $_body['orderRefNumber'])
                    ->join('order_customer_details', 'order_customer_details.parent_id', 'orders.id')
                    ->select('order_customer_details.*')
                    ->first();

                    $number = '0' . substr($getPhone->phone, 2);
                    $_body['customerPhone'] = $number;
                }
            }

            
            foreach($citiesForLabel[$api->id] as $city_key){
                $shippingCityName = ShippingCity::where([['api_id', $api->id], ['code', $_body[$city_key]]])->first();
               
                $_body[$city_key] = is_null($shippingCityName)? '' : $shippingCityName->city;
            }
            
            if($serviceIndex){
                $_body[$serviceIndex] = $serviceForLabel[$api->id][$_body[$serviceIndex]];
            }
        
//print_r($_body);
//die();
            foreach($_body as $key => $value){
                $keys[] = '{'.$key.'}';
                if($key == "invoicePayment"){
		// $values[] = $request->order_shipping_amount + $request->order_total_amount - $request->order_discount_amount; 
			$values[] = $value;
		  }
                else{
                    $values[] = $value;
                   
                   
                }
            }
// testing
//print_r($values);
//die();

            $awb = str_replace($keys, $values, $airway->html);

            $storeAWB = AirwayBill::create([
                'cnnumber' => $_body['cn_number'],
                'order_number' => $request->order_number,
                'content' => $awb
            ]);
            
            $awbs[] = $awb;
        }
        
        updateCurrentDetails($request, $cn_number, $api->name);
        
        $links = [];

        $counter = 0;
    
        foreach($awbs as $_awb){
            $currentTime = rand(5000, 10000);

            $counter++; 

            $file = fopen(public_path('upload/awb').'/'.$currentTime.".html","w");

            $fileWrite = fwrite($file, $_awb);

            $filePath = asset('upload/awb').'/'.$currentTime.".html";
    
            $links[] = '<a href="'.$filePath.'" target="_blank">Download Airway Bill '.$counter.'</a>';
        
            fclose($file);
        }

        return redirect('booking')->with('error', implode(', ', $links));
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    public function book_international(Request $request)
    {
        $request->request->add((['order_number' => strtoupper($request->order_number)]));
        
        $getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

        if(!is_null($getToken)){
            return redirect('booking')->with('error','Order already processed please check shipments for more details');
        }

        $insertToken = OrderToken::create([
            'order_number' => $request->order_number,
            'token' => $request->order_token
        ]);

        $request->order_shipping_method == 'DHL';

        updateIntlCurrentDetails($request);
 
        return redirect('booking')->with('error', 'Order'. $request->order_number.' booked');
    }


    public function book_jaranwala(Request $request)
    {   
        $request->request->add((['order_number' => strtoupper($request->order_number)]));
        
        $getToken = OrderToken::where([['order_number', $request->order_number], ['token', $request->order_token]])->first();

        if(!is_null($getToken)){
            return redirect('booking')->with('error','Order already processed please check shipments for more details');
        }

        $insertToken = OrderToken::create([
            'order_number' => $request->order_number,
            'token' => $request->order_token
        ]);

        if($request->order_shipping_method == 'DHL'){
            echo 'DHL';
            die;
        }
        
        $api = Api::where('id', $request->apiId)->first();
        
        $api_user = ApiUser::where([['user_id', getLoggedInUserId()], ['api_id', $api->id]])->first();

        // Check city and get Name/Code or die if city not found
        if(!getCityNameOrCode($request->destination_city, $api->id)){
            return back()->with('error','City not found');
        }

        $cityNameOrCode = getCityNameOrCode($request->destination_city, $api->id);
        
        $request->request->add((['destination_city' => $cityNameOrCode]));

        // $cityNameOrCode = 'Jaranwala';
            
        // Checking if Key Fields has headers variables and replacing them according to user logged in
        $headers = [];

        if($api->headers != '{}'){
            $decodedApiHeaders = json_decode($api->headers, true);
            $decodedUserHeaderValues = json_decode($api_user->key_values, true);

            foreach($decodedApiHeaders as $key => $value){
                if (array_key_exists($value, $decodedUserHeaderValues)){
                    $decodedApiHeaders[$key] = $decodedUserHeaderValues[$decodedApiHeaders[$key]];
                }
            }

            $headers = $decodedApiHeaders;
        }

        // Replacing post array variables with respect to customer order details
        $decodedApiBody = json_decode($api->body, true);
       
        $postArray = [];

        foreach($decodedApiBody as $key => $value){
            $postArray[$key] = $value;

            if($request->has(str_replace(array('{', '}'), '', $value))){
                $postArray[$key] = $request->input(str_replace(array('{', '}'), '', $value));
            }
        }
        
        // Checking if Key Fields has body variables and replacing them according to user logged in
        foreach($postArray as $key => $value){
            $decodedApiBodyValues = json_decode($api_user->key_values, true);
        
            if (array_key_exists($value, $decodedApiBodyValues)){
                $postArray[$key] = $decodedApiBodyValues[$value];
            }
        }
        
        // Computing weight, pieces and product details
        $requestBodies = computePackageDetails($request, $postArray);
        
        $cn_number = [];
        $awbs = [];
        
        $citiesForLabel = array(
            '1' => array('originCityName', 'destinationCityName'),
            '6' => array('OriginCityId', 'DestCityId'),
            '4' => array('consignee_city_id'),
            '7' => array('delivery_city'),
            '8' => array('delivery_city'),
        );

        $serviceIndex = array_search('{api_service}', $decodedApiBody);
        
        if($serviceIndex){
            $serviceForLabel = array(
                $api->id => json_decode($api->extra_fields, true)['api_service'],
            );
        }
        
        $cityNames = [];
        
        // Checking if API is SOAP or RESTFull
        foreach($requestBodies as $key => $_body){
            $cn_number[$key] = 'JRW'.rand();
            
            $airway = Template::where([['api_id', $api->id], ['type', 'airway label']])->first();

            $keys = [];
            $values = [];

            $_body['date_now'] = date('Y-m-d', strtotime(now()));
            $_body['time_now'] = date('H:i:s', strtotime(now()));
            $_body['package'] = ($key+1) .' / '. count($requestBodies);
            $_body['key'] = $key;
            // $cn_number[$key] = rand();
            $_body['cn_number'] = $cn_number[$key];
            
            foreach($citiesForLabel[$api->id] as $city_key){
                $shippingCityName = ShippingCity::where([['api_id', $api->id], ['code', $_body[$city_key]]])->first();
               
                $_body[$city_key] = is_null($shippingCityName)? '' : $shippingCityName->city;
            }
            
            if($serviceIndex){
                $_body[$serviceIndex] = $serviceForLabel[$api->id][$_body[$serviceIndex]];
            }
        
            foreach($_body as $key => $value){
                $keys[] = '{'.$key.'}';
                $values[] = $value;
            }
            
            $awb = str_replace($keys, $values, $airway->html);

            $storeAWB = AirwayBill::create([
                'cnnumber' => $_body['cn_number'],
                'order_number' => $request->order_number,
                'content' => $awb
            ]);
            
            $awbs[] = $awb;
        }
        
        updateCurrentDetails($request, $cn_number, $api->name);
        
        $links = [];

        $counter = 0;
    
        foreach($awbs as $_awb){
            $currentTime = rand(5000, 10000);

            $counter++; 

            $file = fopen(public_path('upload/awb').'/'.$currentTime.".html","w");

            $fileWrite = fwrite($file, $_awb);

            $filePath = asset('upload/awb').'/'.$currentTime.".html";
    
            $links[] = '<a href="'.$filePath.'" target="_blank">Download Airway Bill '.$counter.'</a>';
        
            fclose($file);
        }

        return redirect('booking')->with('error', implode(', ', $links));
    }


    public function international_page($order_number, $page)
    {
        $awb_link = DB::table('airway_bills_intl')->where('awb_link', $page)->first();

        $pages = $awb_link->airway_bill;

        $order_num = $order_number;

        header("Content-type:application/pdf");
        header("Content-Disposition:inline;filename=label_".$order_num.".pdf");
        echo base64_decode($pages); die;

        return view('modules.extra.index', compact('order_num', 'pages'));
    }


    public function international_page_invoice($order_number, $page)
    {
        $invoice_link = DB::table('airway_bills_intl')->where('invoice_link', $page)->first();

        $pages = $invoice_link->invoice;

        $order_num = $order_number;

        header("Content-type:application/pdf");
        header("Content-Disposition:inline;filename=label_".$order_num.".pdf");
        echo base64_decode($pages); die;

        return view('modules.extra.index', compact('order_num', 'pages'));
    }


    public function addupc()
    {
        return view('modules.sku_upc.index');
    }

    public function import_upc(Request $request)
    {
        if (!$request->hasFile('file')) {
            return redirect()->back()->withError('File Not Found');
        }

        $collection = (new FastExcel)->configureCsv(';', '#', '\n', 'gbk')->import($request->file);

        foreach($collection as $data){
            if(!$data['S.No.']) {
                return redirect()->back()->withError('File does not have the required column names');
            } 
            break;
        }

        $countRowsAdded = 0;
        $rowAlreadyExist = [];
        $sheet = rand();

        foreach($collection as $value) {
            
            
            $get_row = DB::table('sku_upc_example')->where([['upc', $value['Intl/Product Barcode']], ['sku', $value['Tehno Barcode']]])->first();

            if(is_null($get_row)){
                $update_item = DB::table('sku_upc_example')->insert([
                    'upc' => $value['Intl/Product Barcode'],
                    'sku' => $value['Tehno Barcode'],
                ]);   
                $countRowsAdded++;   
            }else{
                $rowAlreadyExist[] = $value['S.No.'];
            }
        }
        return redirect()->back()->withError('File Uploaded. <br>Row(s) Added: <b>'.$countRowsAdded.'</b> <br>Order(s) not synced: <b>'.implode(', ', $rowAlreadyExist). '</b>');
    }

    public function reimport_order_index()
    {
        return view('modules.booking.reimport');
    }

    public function reimport_order(Request $request)
    {
        $orderCheck = DB::table('orders')->where('order_name', $request->order)->first();

        if(is_null($orderCheck)){
            return redirect()->back()->withError('Invalid Order '. $request->order);
        }

        if($orderCheck->status == 'In Process'){
            $remove_order = DB::table('orders')->where('order_name', $request->order)->delete();

            // $this->index($request->order);

            return redirect()->back()->withError('Order '.$request->order.' has been Re-imported.');
        } else {
            return redirect()->back()->withError('Order '.$request->order.' must be inprocess to be removed.');
        }
       
    }

    public function set_in_process()
    { 
        return view('modules.set_in_process.index');
    }

    public function update_in_process(Request $request)
    {
        $request->validate([
            'order' => 'required'
        ]);

        $order = Order::where('order_name', $request->order)->first();
        if(!$order){
            return redirect()->back()->with(['msg'=>"Invalid Order number", "alert"=>"danger"]);
        }

        Order::where('order_name', $request->order)->update([
            'tags' => 'In Process'
        ]);

        return redirect()->back()->with(['msg'=>'Order # '.$request->order.' set in process successfully.', 'alert'=>'success']);
    }

}

