<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;


use App\Models\Appointment;
use Illuminate\Http\Request;

class AppointmentController extends Controller
{
    protected $view= 'admin.appointment.';
    protected $redirect = 'admin/appointments';
     
    public function index(){
        $appointments = Appointment::orderBy('id','DESC');
        if(\request('date')){
            $key = \request('date');
            $appointments = $appointments->whereDate('date',$key);
        }
        if(\request('status')){
            $key = \request('status');
            $appointments = $appointments->where('status',$key);
        }
        $appointments = $appointments->paginate(config('custom.per_page'));
        return view($this->view.'index',compact('appointments'));
    }

    public function create()
    {
        return view($this->view.'create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'date' => 'required|date',
            'start_time' => 'required|date_format:H:i',
            'end_time' => 'required|date_format:H:i',
            // 'location' => 'required|max:255',
            // 'description' => 'required',
        ]);

        $appointment = new Appointment([
            'date' => $request->get('date'),
            'start_time' => $request->get('start_time'),
            'end_time' => $request->get('end_time'),
            'location' => $request->get('location'),
            'description' => $request->get('description'),
            'service_type' => $request->get('service_type'),
        ]);

        $appointment->save();

        return redirect($this->redirect)->with('success', 'Appointment has been added');
    }

    public function edit($id)
    {
        $appointment = Appointment::find($id);

        return view($this->view.'edit', compact('appointment'));
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'date' => 'required|date',
            'start_time' => 'required|date_format:H:i',
            'end_time' => 'required|date_format:H:i',
            // 'location' => 'required|max:255',
            // 'description' => 'required',
        ]);

        $appointment = Appointment::find($id);
        $appointment->date = $request->get('date');
        $appointment->start_time = $request->get('start_time');
        $appointment->end_time = $request->get('end_time');
        $appointment->location = $request->get('location');
        $appointment->description = $request->get('description');
        $appointment->service_type = $request->get('service_type');
        $appointment->save();

        return redirect($this->redirect)->with('success', 'Appointment has been updated');
    }

    public function show($id){
        $appointment = Appointment::with('appointment_booking_detail')->findorfail($id);

        return view($this->view.'show', compact('appointment'));

    }

    public function destroy($id)
    {
        $appointment = Appointment::find($id);
        $appointment->delete();

        return redirect($this->redirect)->with('success', 'Appointment has been deleted');
    }
}