<?php

namespace App\Http\Controllers\API\v1\FamilyMember;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\API\BaseController as BaseController;
use App\Http\Controllers\API\DefaultController as DefaultController;
use App\Models\User;
use App\Models\UserProfile;
use App\Models\UserDeviceToken;
use App\Models\RoleUser;
use App\Models\Role;
use App\Models\CharitableOrganization;
use App\Models\TempCampaign;
use App\Models\Restaurant;
use App\Models\Badge;
use App\Models\MenuCategory;
use App\Models\Menu;
use App\Models\MenuAddOnCategory;
use App\Models\MenuAddOn;
use Validator;
use DB, Hash, Mail;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Str;
use App\Services\UserService;
use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManagerStatic as Image;
use App\Services\Api\AuthTokenService;
use App\Services\DefaultServices;
use App\Services\RestaurantServices;
use Exception;
use App\Mail\Api\Auth\ApiUserEmailVerification;

class MenuController extends Controller
{
    protected $baseController;
    protected $defaultController;
    protected $request;
    protected $userService;
    protected $authTokenService;
    protected $defaultServices;
    protected $providerService;
    protected $restaurantServices;

    public function __construct(BaseController $baseController, UserService $userService, AuthTokenService $authTokenService, DefaultServices $defaultServices, DefaultController $defaultController, RestaurantServices $restaurantServices)
    {
        $this->baseController = $baseController;         
        $this->defaultController = $defaultController;
        $this->userService    = $userService;
        $this->authTokenService = $authTokenService;
        $this->defaultServices  = $defaultServices;
        $this->restaurantServices = $restaurantServices;       
        $this->middleware('apiTokenVal');
    }

    public function getMenuByRestaurant($flag, Request $request)
    {
        $status_code = 0;
        $success = [];                    
        $inputs = $request->all();
        $inputs = $this->defaultServices->getTrimmedValue($inputs);
        $messageArr['input'] = $inputs;
        $userType = 'family-member';

        try 
        {
            $tokenDetails = Auth::user()->token();
            $additionalArr['user_id'] = $user_id = $tokenDetails->user_id;

            $messages = [
                'restaurant_id.required' => 'Please enter restaurant id',               
            ];

            $validator = Validator::make($inputs,[
                "restaurant_id" => 'required',
            ], $messages);

            if($validator->fails()) {
                return $this->baseController->sendFamilyMemberResponse($status_code, $success, $validator->errors()->first(), 200, $messageArr, $additionalArr);
                exit(0);
            }

            $success = $this->restaurantServices->getFullMenuDetailsByRestaurantId($inputs['restaurant_id']);

            if(empty(objectToArray($success))) {
                return $this->baseController->sendFamilyMemberResponse($status_code, $success, 'No menu list found', 200, $messageArr, $additionalArr);
                exit(0);
            }

            $status_code = 1;

            return $this->baseController->sendFamilyMemberResponse($status_code, $success, 'success', 200, $messageArr, $additionalArr);

        } catch (Exception $e) { 
            $messageArr = [];           
            return $this->baseController->sendFamilyMemberResponse(0, [], $e->getMessage(), 200, $messageArr);
        }

    }

}
