<?php

namespace App\Http\Controllers\TestCenter;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\Models\Service;
use App\Models\Client;
use App\Models\Booking;
use App\Models\TestCenter;
use Illuminate\Support\Facades\Mail;
use App\Repositories\SimplyBookRepository;
use Auth;

/**
 * Class SyncController.
 */
class SyncController extends Controller
{
    /**
     * @var model
     * @var serviceModel
     * @var clientModel
     * @var testCenterModel
     * @var simpleBookRepository
     */
    protected $model;
    protected $serviceModel;
    protected $clientModel;
    protected $testCenterModel;
    protected $simpleBookRepository;

    /**
     * SyncController constructor.
     *
     * @param model $model
     * @param serviceModel $serviceModel
     * @param clientModel $clientModel
     * @param testCenterModel $testCenterModel
     * @param simpleBookRepository $simpleBookRepository
     */
    public function __construct()
    {
        $this->model = new Booking;
        $this->serviceModel = new Service;
        $this->clientModel = new Client;
        $this->testCenterModel = new TestCenter;
        $this->simpleBookRepository = new SimplyBookRepository;
    }

    /**
     * SyncController list method.
     *
     */
    public function index(Request $req) 
    {
    	return view('testcenter.pages.sync.list'); 
    }

    /**
     * Feed method.
     *
     * @param $req
     *
     * @return redirection
     */
    public function feed(Request $req) {
        $authentication = $this->simpleBookRepository->authentication();
        if($authentication){
            $total_booking = 0;
            $page = 1;
            $limit = 200;
            //$current_date = '2021-01-25';
           $current_date = date('Y-m-d');
            $testCenterDetail = $this->testCenterModel->find(Auth::guard('testcenter')->user()->test_center_id);
			//var_dump($testCenterDetail);
            if($testCenterDetail){
                $provider_id = $testCenterDetail->provider_id;
				
                $bookings = $this->simpleBookRepository->booking($authentication, $page, $limit, $current_date, $provider_id);
                if(count($bookings)){
                    //print_r($bookings);die;
					//echo '<pre>';
					//print_r($bookings['data']);
                    foreach ($bookings['data'] as $key => $booking) {
						
						//if($key==1){
							//print_r($key);
                        $service_name = trim($booking['service']['name']);
						//print_r( $service_name);
                        $serviceDetails = $this->serviceModel->where(['name'=>$service_name])->first();
						//print_r($serviceDetails);
                        if($serviceDetails){
							
                            if(count($booking['client'])){
                                $client_email = trim($booking['client']['email']);
                                $clientDetails = $this->clientModel->where(['email'=>$client_email])->first();
							//	print_r($clientDetails);
                                if(!$clientDetails){
                                    $client_arr = [
                                        'name' => $booking['client']['name'],
                                        'email' => $booking['client']['email'],
                                        'phone' => $booking['client']['phone'],
                                        'address1' => $booking['client']['address1'],
                                        'address2' => $booking['client']['address2'],
                                        'address2' => $booking['client']['address2'],
                                        'city' => $booking['client']['city'],
                                        'zip' => $booking['client']['zip'] ? $booking['client']['zip'] : 0,
                                        'country_id' => $booking['client']['country_id'] ? $booking['client']['country_id'] : 0,
                                        'starte_id' => $booking['client']['state_id'] ? $booking['client']['state_id'] : 0,
                                        'status' => 1
                                    ];
                                    $clientinsert = $this->clientModel->create($client_arr);
                                    $client_id = $clientinsert->id;
                                } else {
                                    $client_id = $clientDetails->id;
                                }
								//print_r($booking['invoice_id']);
                                if(isset($booking['invoice_id'])){
                                    $invoice_number = trim($booking['invoice_number']);
                                    //$bookingDetails = $this->model->where(['invoice_number'=>$invoice_number])->first();
                                    $bookingDetails = $this->model->where(['invoice_id'=>$booking['invoice_id']])->first();
									//print_r($bookingDetails);
                                    if(!$bookingDetails){
                                        $booking_arr = [
                                            'provider_id' => $testCenterDetail->id,
                                            'service_id' => $serviceDetails->id,
                                            'client_id' => $client_id,
                                            'invoice_number' => $invoice_number,
                                            'invoice_id' => $booking['invoice_id'],
                                            'invoice_status' => $booking['invoice_status'],
                                            'invoice_payment_received' => $booking['invoice_payment_received'] == false ? 0 : 1,
                                            'invoice_payment_processor' => $booking['invoice_payment_processor'],
                                            'invoice_datetime' => $booking['invoice_datetime'],
                                            'amount' => $serviceDetails->price,
                                            'currency' => $serviceDetails->currency,
                                            'ticket_code' => $booking['ticket_code'] ? $booking['ticket_code'] : '',
                                            'code' => $booking['code'],
                                            'status' => 0,
                                            'json_data' => json_encode($booking)
                                        ];
                                        $bookinginsert = $this->model->create($booking_arr);
                                        $booking_id = $bookinginsert->id;
                                        $total_booking = $total_booking + 1;
                                    } 
                                }
                            }                            
                        }
						//}
                    }
					//die();
                    if($total_booking > 0){
                        $response = array('status'=>200, 'message'=>'success', 'result'=>$total_booking); 
                        return response()->json($response);
                    } else {
                        $response = array('status'=>201, 'message'=>'No booking found...', 'result'=>[]); 
                        return response()->json($response);
                    }
                } else {
                    $response = array('status'=>201, 'message'=>'No booking found...', 'result'=>[]); 
                    return response()->json($response);
                }
            }
        }   
    }
}
