<?php

namespace App\Http\Controllers\Frontend\User;

use App\Http\Controllers\Controller;
use App\Http\Requests\Frontend\User\UpdateProfileRequest;
use App\Models\Auth\User;
use App\Models\Lookups\Institution_lookup;
use App\Models\Lookups\Position_lookup;
use App\Models\Lookups\Prefix_lookup;
use App\Models\Lookups\Research_focus_lookup;
use App\Repositories\Frontend\Auth\UserRepository;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Request;

/**
 * Class ProfileController.
 */
class ProfileController extends Controller
{
    /**
     * @var UserRepository
     */
    protected $userRepository;

    /**
     * ProfileController constructor.
     *
     * @param UserRepository $userRepository
     */
    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    public function view($uuid)
    {
        $user = User::where('uuid',$uuid)->first();
        if($user->public=='1') {
            $boards = $user->boards->where(['public', 1]);
            return view('frontend.user.publicprofile')
                ->with('user', $user)
                ->with('boards', $boards);
        }else{
            abort(404);
        }
    }

    /**
     * @param UpdateProfileRequest $request
     *
     * @return mixed
     * @throws \App\Exceptions\GeneralException
     */
    public function update(UpdateProfileRequest $request)
    {
        //    dd($request);
        if (isset($request['prefix_lookup_id'])) {

            if (!(Prefix_lookup::where('id', $request['prefix_lookup_id'])->exists())) {
                $new = Prefix_lookup::updateOrCreate(['text' => $request['prefix_lookup_id']]);
                $request['prefix_lookup_id'] = $new->id;

            }
        }

        if (isset($request['position_lookup_id'])) {
            if (!(Position_lookup::where('id', $request['position_lookup_id'])->exists())) {
                $new = Position_lookup::updateOrCreate(['text' => $request['position_lookup_id']]);
                $request['position_lookup_id'] = $new->id;
            }
        }

        if (isset($request['institution_lookup_id'])) {
            if (!Institution_lookup::find($request['institution_lookup_id'])) {
                $new = Institution_lookup::updateOrCreate(['text' => $request['institution_lookup_id']]);
                $request['institution_lookup_id'] = $new->id;
            }
        }
        $request['research_focus_lookup_ids'] = '';
        if (isset($request['research_focus_lookup_id'])) {
            foreach ($request['research_focus_lookup_id'] as $item) {
                if (!(Research_focus_lookup::where('id', $item)->exists())) {
                    $new = Research_focus_lookup::updateOrCreate(['text' => $item]);
                    $request['research_focus_lookup_ids'] .= $new->id . ',';
                } else {
                    $request['research_focus_lookup_ids'] .= $item . ',';
                }
            }
            $request['research_focus_lookup_ids'] = rtrim($request['research_focus_lookup_ids'], ',');
        }

        $output = $this->userRepository->update(
            $request->user()->id,
            $request->only('first_name', 'last_name',
                'prefix_lookup_id',
                'position_lookup_id',
                'institution_lookup_id',
                'research_focus_lookup_ids',
                'public',
                'phone', 'phone', 'avatar_type', 'avatar_location'),

            $request->has('avatar_location') ? $request->file('avatar_location') : false
        );

        // E-mail address was updated, user has to reconfirm
//        if (is_array($output) && $output['email_changed']) {
//            auth()->logout();
//
//            return redirect()->route('frontend.auth.login')->withFlashInfo(__('strings.frontend.user.email_changed_notice'));
//        }

        return redirect()->route('frontend.user.account')->withFlashSuccess(__('strings.frontend.user.profile_updated'));
    }

    ///////////////////////////////////////////////////////////////////////////////
    ///
    /// Search results for select2 controls
    /// Only returns public
    ///
    /// //////////////////////////////////////////////////////////////////////////

    public function searchforselect2(Request $request)
    {
        $input = $request::all();
        $search = $input['q']['term'];
        //  dd($search);
        $returnStr = [];
        $users = User::where(DB::raw('CONCAT(first_name, last_name)'), 'LIKE', "%{$search}%")->where('public', '1')->get();
        foreach ($users as $user){
            $returnStr[]= ['id'=>$user->id, 'text'=>"{$user->name}" ];
        }
        return \json_encode(['results'=>$returnStr]);
        //dd($offerings);
    }

    public function searchforselect2private(Request $request)
    {
        if (auth()->user()->hasRole('administrator')) {
            $input = $request::all();
            $search = $input['q']['term'];
            //  dd($search);
            $returnStr = [];
            $users = User::where(DB::raw('CONCAT(first_name, last_name)'), 'LIKE', "%{$search}%")->get();
            foreach ($users as $user){
                $returnStr[]= ['id'=>$user->id, 'text'=>"{$user->name} ({$user->email})" ];
            }
            return \json_encode(['results'=>$returnStr]);
        }
       return null;
        //dd($offerings);
    }


}
