<?php

namespace App\Http\Controllers\Backend\Quotation;

use App\Models\Quotation;
use App\Http\Controllers\Controller;
use App\Events\Backend\Quotation\QuotationDeleted;
use App\Repositories\Backend\QuotationRepository;
use App\Repositories\Backend\QuotationToSpRepository;
use App\Repositories\Backend\QuotationToImageRepository;
use App\Http\Requests\Backend\Quotation\StoreQuotationRequest;
use App\Http\Requests\Backend\Quotation\ManageQuotationRequest;
use App\Http\Requests\Backend\Quotation\UpdateQuotationRequest;
use Illuminate\Support\Facades\Mail;
use App\Mail\Backend\Quotation\PaymentStatus;
use App\Mail\Backend\Quotation\PaymentStatusSp;


class QuotationController extends Controller
{
    /**
     * @var QuotationRepository
     */
    protected $quotationRepository;

    /**
     * QuotationController constructor.
     *
     * @param QuotationRepository $quotationRepository
     */
    public function __construct(QuotationRepository $quotationRepository, QuotationToImageRepository $quotationToImageRepository, QuotationToSpRepository $quotationToSpRepository)
    {
        $this->quotationRepository = $quotationRepository;
        $this->quotationToImageRepository = $quotationToImageRepository;
        $this->quotationToSpRepository = $quotationToSpRepository;
    }

    /**
     * @param ManageQuotationRequest $request
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index(ManageQuotationRequest $request)
    {
        
        return view('backend.quotation.index')
            ->withQuotation($this->quotationRepository->getActivePaginated(25, 'id', 'asc'));
    }


    /**
     * @param ManageQuotationRequest $request
     * @param Quotation              $quotation
     *
     * @return mixed
     */
    public function show(ManageQuotationRequest $request, Quotation $quotation)
    {
        //$quotesPostedBy = $postedBy->getUserByQuoteId($quotation->posted_id);
        $quotesPostedBy = $quotation->getPoster;

        //$quoteImages = $quoteToimages->getAll($quotation->id);
        $quoteImages = $quotation->getQuoteImages;
        $quoteToSpDetails = [];
        $quoteToSp = $quotation->getServiceProviders;
        foreach( $quoteToSp as $key=>$val){
           // echo "<pre>"; print_r( $val->id); echo "</pre>";
            $quoteToSpDetails[] = $this->quotationToSpRepository->getSpDetails($val->serviceprovider_id);
        }
        //print_r($quotation->id);  die();
        

        $selectedImage = [];
        if ($quoteImages) {
            foreach ($quoteImages as $key => $value) {
                array_push($selectedImage, $value->image_location);
            }
        }
        return view('backend.quotation.show')
            ->withQuotation($quotation)
            ->withPostedBy($quotesPostedBy)
            ->withQuotationImages($selectedImage)
            ->withSpQuotationDetails($quoteToSpDetails);
    }

    public function quotation_belongs_sp($sp_id, $quote_id){

        

        $quoteBlongsToSp = $this->quotationToSpRepository->getQuotationToSpdetails($sp_id, $quote_id);
        $quoteImages = $this->quotationToImageRepository->getAll($quote_id);
        $quoteBlongsToSpDetails = $this->quotationToSpRepository->getSpDetails($sp_id);
        $quotationDetails = $this->quotationRepository->quotationDetailsById($quote_id);
        $selectedImage = [];
        if ($quoteImages) {
            foreach ($quoteImages as $key => $value) {
                array_push($selectedImage, $value->image_location);
            }
        }
         return view('backend.quotation.quotationbelongstosp')
                ->withQuotation($quotationDetails)
                ->withQuotationImages($selectedImage)
                ->withQuotationBelongsToSp($quoteBlongsToSp)
                ->withQuotationBelongsToSpDetails($quoteBlongsToSpDetails);
    }

    /**
     * @param ManageQuotationRequest    $request
     * @param Quotation                 $quotation
     *
     * @return mixed
     */
    public function edit(ManageQuotationRequest $request, Quotation $quotation)
    {
        
        //$quotesPostedBy = $postedBy->getUserByQuoteId($quotation->posted_id);
        $quotesPostedBy = $quotation->getPoster;

        //$quoteImages = $quoteToimages->getAll($quotation->id);
        $quoteImages = $quotation->getQuoteImages;

        $selectedImage = [];
        if ($quoteImages) {
            foreach ($quoteImages as $key => $value) {
                array_push($selectedImage, $value->image_location);
            }
        }
        return view('backend.quotation.edit')
            ->withQuotation($quotation)
            ->withPostedBy($quotesPostedBy)
            ->withQuotationImages($selectedImage);
    }

    /**
     * @param ManageQuotationRequest $request
     * @param Quotation              $quotation
     *
     * @return mixed
     * @throws \App\Exceptions\GeneralException
     * @throws \Throwable
     */
    public function update(ManageQuotationRequest $request, Quotation $quotation)
    {
        
        $emailList = [];
        $quotesPostedBy = $quotation->getPoster;
        //array_push($emailList, $quotesPostedBy->email);
        $quotationToSp = $this->quotationToSpRepository->getSelectedSpDetails($quotation->id);
        //array_push( $emailList, $quotationToSp->getSpuser->email);
        $userName= $quotesPostedBy->first_name . ' ' . $quotesPostedBy->last_name;
        $spName = $quotationToSp->getSpuser->first_name . ' ' . $quotationToSp->getSpuser->last_name;
        $quoteImages = $quotation->getQuoteImages;
        $selectedImage = [];
        if ($quoteImages) {
            foreach ($quoteImages as $key => $value) {
                array_push($selectedImage, $value->image_location);
            }
        }

        $quotation = $this->quotationRepository->update($quotation,array('payment_status' => $request->input('payment_status'), 'payment_date' => date("Y-m-d H:i:s")));
        if($quotation->payment_status == 1){
            $quotationDataUser = array('posted_by' => $userName,'status' => 'Paid', 'payment_type' => $quotation->payment_type, 'payment_date' => $quotation->payment_date, 'message' => $quotation->quotation_message, 'attachment' => $selectedImage, 'senderemail' => 'admin@admin.com', 'sendername' => 'Admin');
             Mail::to($quotesPostedBy->email,'Payment Status')->send(new PaymentStatus($quotationDataUser));
             $quotationDataSp = array('posted_by' => $userName, 'sp_name' => $spName, 'status' => 'Paid', 'payment_type' => $quotation->payment_type, 'payment_date' => $quotation->payment_date, 'message' => $quotation->quotation_message, 'attachment' => $selectedImage, 'senderemail' => 'admin@admin.com', 'sendername' => 'Admin');
            Mail::to($quotationToSp->getSpuser->email,'Payment Status')->send(new PaymentStatusSp($quotationDataSp));

           
        }

        return redirect()->route('admin.quotation.index')->withFlashSuccess(__('alerts.backend.quotation.updated'));
    }

    /**
     * @param ManageQuotationRequest $request
     * @param Quotation              $quotation
     *
     * @return mixed
     * @throws \Exception
     */
    public function destroy(ManageQuotationRequest $request, Quotation $quotation)
    {
       
        $this->quotationRepository->deleteById($quotation->id);
        $this->quotationToImageRepository->delById($quotation->id);

        event(new QuotationDeleted($quotation));
        return redirect()->route('admin.quotation.deleted')->withFlashSuccess(__('alerts.backend.quotation.deleted'));
    }

}

