<?php

namespace App\Http\Controllers;

use App\Model\Alumno;
use App\Model\Ciclo;
use App\Model\Especialidad;
use App\Model\Evento;
use App\Model\Grupo;
use App\Participante;
use App\Model\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Redirect;
use Mockery\Exception;
use Yajra\Datatables\Datatables;
use App\Model\Turno;
use App\Model\EstadoAlumno;
use App\Model\EstadoConvalidacion;
use Carbon\Carbon;

class GestionEgresadosController extends Controller
{
    public function getEgresados(){
        return view('pages.egresados.index');
    }

    public function postEgresados(Request $request){
        try {
            $q = $request->q ? $request->q : "";
            $egresado = Alumno::join('especialidad', 'especialidad.id', 'alumno.id_especialidad')
                ->join('usuario', 'usuario.id', 'alumno.id_usuario')
                ->select(
                    'alumno.id as id',
                    'alumno.codigo as codigo',
                    DB::raw('CONCAT(usuario.nombres," ",usuario.apellido_paterno," ",usuario.apellido_materno) as nombres'),
                    'especialidad.nombre as especialidad_nombre',
                    'alumno.anio_egreso as anio_egreso'
                )
                ->where('alumno.egresado','=',1)
                ->where(function ($query) use ($q) {
                    $query->where('alumno.codigo', 'like', '%' . $q . '%')
                        ->orWhere('usuario.nombres', 'like', '%' . $q . '%')
                        ->orWhere('usuario.apellido_paterno', 'like', '%' . $q . '%')
                        ->orWhere('usuario.apellido_materno', 'like', '%' . $q . '%');
                })->get();
        }catch(\Exception $e){
            return Datatables::of([])->make(true);
        }
        return Datatables::of($egresado)->make(true);
    }

    public function getEgresadosCrear(Request $request){
        $accion = 'gestion.egresados.crear.post';
        $titulo = "Creacion de Egresado";
        $alumno = new Alumno();
        $usuario = new User();
        $especialidad = new Especialidad();
        $ciclos = Ciclo::all()->pluck('nombre','id');
        $turno = Turno::all()->pluck('nombre','id');
        $estadoal = EstadoAlumno::all()->pluck('nombre','id');
        $estadoco = EstadoConvalidacion::all()->pluck('nombre','id');
        return view('pages.egresados.modal._editar',compact('titulo','alumno','ciclos','turno','estadoal','estadoco','accion','usuario','especialidad'));
    }

    public function postEgresadosCrear(Request $request){

        try{
            $this->validate($request,[
                'descripcion' => 'required|max:191',
                'dni' => 'required',
                'id_especialidad' => 'required',
                'id_ciclo' => 'required',
                'id_estado_alumno' => 'required',
                'id_estado_convalidacion' => 'required'
            ]);

            $usuario = User::create([
                'username' => $request["codigo"],
                'dni' => $request["dni"],
                'password' => bcrypt($request["dni"])
            ]);

            $egresado = [
                'codigo' => $usuario["username"],
                'egresado' => true,
                'anio_egreso' => $request["anio_egreso"],
                'descripcion' => $request["descripcion"],
                'id_especialidad' => $request["id_especialidad"],
                'id_usuario' => $usuario["id"],
                'id_ciclo' => $request["id_ciclo"],
                'id_estado_alumno' => $request["id_estado_alumno"],
                'id_estado_convalidacion' => $request["id_estado_convalidacion"]
            ];

            $result = Alumno::create($egresado);
            return response()->json(['success'],200);
        }catch (Exception $e){
            return response()->json(['error'],400);
        }
    }

    public function getEgresadosEditar(Request $request){
        $accion = 'gestion.egresados.editar.post';
        $titulo = "Creacion de Egresado";
        $alumno = Alumno::Find($request->id);
        $usuario = User::Find($alumno['id_usuario']);
        $especialidad = Especialidad::Find($alumno['id_especialidad']);
        $ciclos = Ciclo::all()->pluck('nombre','id');
        $turno = Turno::all()->pluck('nombre','id');
        $estadoal = EstadoAlumno::all()->pluck('nombre','id');
        $estadoco = EstadoConvalidacion::all()->pluck('nombre','id');
        return view('pages.egresados.modal._editar',compact('titulo','alumno','especialidad','ciclos','turno','estadoal','estadoco','accion','usuario'));
    }

    public function postEgresadosEditar(Request $request){
        try{
            $egresado = Alumno::Find($request->id);
            $egresado->anio_egreso = $request["anio_egreso"];
            $egresado->descripcion = $request["descripcion"];
            $egresado->id_especialidad = $request["id_especialidad"];
            $egresado->id_usuario = $request["id_usuario"];
            $usuario = User::Find($request["id_usuario"]);
            $usuario->dni = $request["dni"];
            $usuario->username = $request["codigo"];
            $usuario->password = bcrypt($request["dni"]);
            $egresado->codigo = $usuario["username"];
            $egresado->id_ciclo = $request["id_ciclo"];
            $egresado->id_estado_alumno = $request["id_estado_alumno"];
            $egresado->id_estado_convalidacion = $request["id_estado_convalidacion"];
            $egresado->save();
            $usuario->save();

            return response()->json(['code' => '200', 'message' => 'El anuncio ha sido editado']);
        }catch(\Exception $e){
            return response()->json(['code' => '400', 'message' => $e->getMessage()]);

        }
    }

    public function postEgresadosEliminar(Request $request){
        try{
            $result = Alumno::find($request->input('id'));
            $result->delete();
            alert()->success('Se eliminó el alumno correctamente', 'Éxito!');
            return redirect('gestion/egresados');
        }catch(Exception $e){
            return Redirect('/');
        }
    }

    public function getAlumnos(Request $request){
        $alumnos = User::Join('role_user','role_user.user_id','usuario.id')
        ->select(
            'usuario.id as id',
            DB::raw('CONCAT(usuario.username," - ",usuario.nombres," ",usuario.apellido_paterno," ",usuario.apellido_materno) as nombres')
        )
        ->where('role_user.role_id','=',config('constants.ROLES.ALUMNO'))
        ->where('nombres','like',$request->q.'%')->pluck('nombres','id');
        $valid_tags = [];
        foreach ($alumnos as $id => $tag) {
            $valid_tags[] = ['id' => $id, 'text' => $tag];
        }
        return response()->json($valid_tags,200);
    }

    public function getEspecialidades(Request $request){
        $especialidad = Especialidad::where('especialidad.nombre','like',$request->q.'%')->pluck('nombre','id');
        $valid_tags = [];
        foreach ($especialidad as $id => $tag) {
            $valid_tags[] = ['id' => $id, 'text' => $tag];
        }
        return response()->json($valid_tags,200);
    }

    public function getCarrera(Request $request){
        $especialidades = [];
        if($request->has('term')){
            $aux = $request->term["term"];
            $especialidades = Especialidad::where('especialidad.nombre','like', '%' .strtolower($aux).'%')
                ->select("id","nombre")
                ->limit('20')
                ->get();
        }
        return response()->json($especialidades);
    }

}
