<?php

namespace Modules\Internal\Http\Controllers\Api;

use App\Helpers\Helper;
use App\Models\Practitioner;
use App\Models\PractitionerRole;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\DoctorResource;

class DoctorController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */
    public function index(Request $request)
    {
        // $doctors = PractitionerRole::active()->with('practitioner.person', 'organization')
        //     ->when($request->search ?? null, function ($query, $search) {
        //         $query->whereHas('practitioner.person', function ($person) use ($search) {
        //             $person->where('name', 'LIKE', '%' . $search . '%');
        //         });
        //     })->paginate();

        $doctors = Practitioner::with('person', 'practitionerRoles.organization', 'practitionerRoles.speciality')
            ->when($request->search ?? null, function ($query, $search) {
                $query->whereHas('person', function ($person) use ($search) {
                    $person->where('name', 'LIKE', '%' . $search . '%');
                });
            })
            ->when($request->organization_id ?? null, function ($query, $organization_id) {
                $query->whereHas('practitionerRoles', function ($practitionerRole) use ($organization_id) {
                    $practitionerRole->where('organization_id', $organization_id);
                });
            })
            ->when($request->speciality_id ?? null, function ($query, $speciality_id) {
                $query->whereHas('practitionerRoles', function ($practitionerRole) use ($speciality_id) {
                    $practitionerRole->where('speciality_id', $speciality_id);
                });
            })
            ->paginate();

        // return $doctors;


        return response()->json(Helper::paginateResources(DoctorResource::collection($doctors)));
    }

    /**
     * Show the form for creating a new resource.
     * @return Renderable
     */
    public function create()
    {
        return view('internal::create');
    }

    /**
     * Store a newly created resource in storage.
     * @param Request $request
     * @return Renderable
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Show the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function show($id)
    {
        return view('internal::show');
    }

    /**
     * Show the form for editing the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function edit($id)
    {
        return view('internal::edit');
    }

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

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