<?php

namespace App\Http\Controllers\Backoffice;

use App\Http\Controllers\Controller;
use App\Facades\Backoffice\BackendUserService;
use App\Http\Requests\Backoffice\ContentTypeListRequest;
use App\Http\Requests\Backoffice\DoctorEdit;
use App\Http\Requests\Backoffice\DoctorRequest;
use App\Models\Backoffice\Doctor;
use App\Services\DoctorService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Inertia\Inertia;
use Symfony\Component\HttpKernel\Exception\HttpException;

class DoctorsController extends Controller
{
    /* BO Function */
    public function getIndex(Request $request)
    {
        $loggedUser = BackendUserService::getLoggedUser();

        return Inertia::render('Backoffice/Doctors/ListDoctors', [
            'data' => [
                'canInsert' => $loggedUser->hasPermission('users.insert'),
                'user' => $loggedUser,
            ]
        ]);
    }

    /* BO Function */
    public function postList(ContentTypeListRequest $request, DoctorService $doctorService)
    {
        $data = $request->validated();

        $sort = isset($data['sort']) ? array($data['sort']['key'] => $data['sort']['order']) : array("first_name" => "asc");

        $list = $doctorService->getDoctorGridList($data['page'], $data['itemsPerPage'], $sort, $data['search']);

        return response()->json($list);
    }

    /* BO Function */
    public function getEdit($doctorId = null)
    {
        $loggedUser = BackendUserService::getLoggedUser();
        $canView = $loggedUser->hasPermission("users.view");
        $canEdit = $loggedUser->hasPermission("users.edit");

        if (!empty($doctorId)) {
            $doctor = Doctor::find($doctorId);
        } else {
            $doctor = new Doctor();
        }

        if(empty($doctor)){
            throw new HttpException(404, 'Doctor not found');
        }

        return Inertia::render('Backoffice/Doctors/EditDoctor', [
            'data' => [
                'canView' => $canView,
                'canEdit' => $canEdit,
                'doctor' => $doctor,
            ],
            'message' => Session::get('message'),
            'errorMessage' => Session::get('errorMessage')
        ]);
    }

    /* BO Function */
    public function postEdit(DoctorEdit $request, DoctorService $doctorService, $doctorId = null)
    {
        $data = $request->validated();

        if(!empty($doctorId)){
            $doctor = $doctorService->updateDoctor($doctorId, $data);

            $message = trans('backend.updated_successfully',
                array('entity' => trans('backend.doctor')));
        } else {
            $doctor = $doctorService->createDoctor($data);
        }

        $message = trans('backend.inserted_successfully',
            array('entity' => trans('backend.doctor')));

        return redirect()->to('/admin/doctors/edit/' . $doctor->id)->withMessage($message);
    }

    /* BO Function */
    public function postDelete(DoctorRequest $request)
    {
        $data = $request->validated();
        $doctor = Doctor::find($data['doctorId']);

        if(!empty($doctor)){
            $doctor->delete();
        }

        return response()->json(["success" => true]);
    }
}
