<?php

namespace App\Http\Controllers\Seguimiento\Cita;

use App\Http\Requests\CitaRequest;
use App\Notifications\IntranetNotification;
use App\Model\Alumno;
use App\Model\Cita;
use App\Model\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Yajra\Datatables\Datatables;

class CitaController extends Controller
{

    public function getCita(){
        return view('pages.seguimiento.cita.index');
    }

    public function postCita(){

        $citas = Cita::join('alumno','alumno.id','=','cita.id_alm')
            ->join('usuario','usuario.id','=','alumno.id_usuario')
            ->where('id_adm','=',Auth::user()->id)
            ->select(
                'cita.id as id',
                'cita.titulo as titulo',
                'cita.detalle as detalle',
                'cita.fecha as fecha',
                'cita.cita as terminado',
                DB::raw('CONCAT(usuario.apellido_paterno, " ", usuario.apellido_materno, ", ", usuario.nombres) AS alumno')
            )
            ->get();

        return Datatables::of($citas)->make(true);
    }

    public function getCitaDetails($id){
        return view('pages.seguimiento.cita.detalle',compact('id'));
    }

    public function postCitaDetails(Request $request){
        $alumno = Alumno::where('id_usuario','=',$request->id)->first();
        $citas = Cita::where('id_alm','=',$alumno->id);

        if(!Auth::user()->isAdmin()){
            $citas->where('id_adm','=',Auth::user()->id);
        }
        $citas->select('id','titulo','detalle','cita','fecha','id_alm')
            ->get();
        $datatables =  Datatables::of($citas);
        return $datatables->make(true);
    }

    public function getCreateCita($id){
       $alumno = Alumno::where('id_usuario',$id)->firstOrFail();
       return view('pages.seguimiento.cita.create',compact('id',$alumno->id));
    }

    public function postCreateCita(CitaRequest $request){

       $alumno = Alumno::where('id_usuario',$request->id_alm)->first();
       $user = User::find($alumno->id_usuario);

       $cita = [
           'titulo' => $request->titulo,
           'detalle' => $request->detalle,
           'fecha' => Carbon::createFromFormat('d/m/Y H:i',$request->fecha)->toDateTimeString(),
           'id_alm' => $alumno->id,
           'id_adm' => $request->psicologo
       ];

       $result = Cita::create($cita);

       if($result){
           alert()->success('La cita se ha creado satisfactoriamente', 'Listo');
           $user->notify(new IntranetNotification('','Cita nueva', 'Cita con '.Auth::user()->full_name));
       }else{
           alert()->error('Ha ocurrido un error al intentar guardar.', 'Error');
       }

       return redirect('seguimiento/cita/detalle/'.$request->id_alm);
    }

    public function getEditarCita($id){
       $accion = 'gestion.cita.editar.post';
       $cita = Cita::find($id);
       $ps = User::find($cita->id_adm);
       return view('pages.seguimiento.cita.modal._editar',compact('accion','cita','ps'));
    }

    public function postEditarCita(CitaRequest $request){

        $cita = Cita::findOrFail($request->id);
        $alumno = Alumno::find($cita->id_alm);

        $cita->titulo = $request->titulo;
        $cita->detalle =  $request->detalle;
        $cita->fecha = Carbon::createFromFormat('d/m/Y H:i',$request->fecha)->toDateTimeString();
        $cita->id_adm = $request->psicologo;

        $result = $cita->save();

        if($result)
            alert()->success('Se editó la cita correctamente.', 'Éxito!');
        else
            alert()->error('Ocurrió un error al editar la cita.', 'Error!');

        return redirect('seguimiento/cita/detalle/'.$alumno->id_usuario);
    }

    public function postEliminarCita(Request $request){

        $cita = Cita::findOrFail($request->id)->delete();

        return response()->json('sucess',200);

    }

    public function postEstado(Request $request){
        $cita = Cita::find($request->id);
        $cita->cita = $cita->cita ? 0 : 1;
        $cita->save();
        return response()->json('success',200);
    }

    public function getCalendario(){
        return view('pages.seguimiento.cita.calendario');
    }
    
    public function postCalendario(Request $request){

        $start = Carbon::createFromTimestamp($request->start);
        $end = Carbon::createFromTimestamp($request->end);

        $citas = Cita::whereBetween('cita.fecha',[$start,$end])->get();

        $days = [];

        foreach($citas as $cita){
            $d['id'] = $cita->id;
            $d['title'] = $cita->titulo;
            $d['start'] = $cita->fecha;
            $d['description'] = $cita->detalle;
            array_push($days,$d);
        }

        return response()->json($days);

    }

    public function getRolePsicologo(){
        $psicologo = [];
        $psicologo = User::join('role_user','role_user.user_id','=','usuario.id')
            ->join('roles','roles.id','=','role_user.role_id')
            ->where('roles.id','=',config('constants.ROLES.PSICOLOGO'))
            ->select(
                'usuario.id as id',
                DB::raw("CONCAT(usuario.apellido_paterno,' ',usuario.apellido_materno,', ',usuario.nombres) as nombre")
            )->get();
        return response()->json($psicologo);
    }
    
}
