<?php

namespace App\Http\Controllers\Api;

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class profesorRegistroBitacora extends Controller
{
    public function getRegistrosP(){
        $Registro = DB::table('bitacoras_colegioabc')
        ->leftJoin('usuarios', 'bitacoras_colegioabc.idAlumnoBitacora', '=', 'usuarios.idUsuario')
        ->leftJoin('bitacoras_tipos', 'bitacoras_colegioabc.idTipoBitacora', '=', 'bitacoras_tipos.idBitacorasTipos')
        ->leftJoin('vista_materias_grados_grupos', 'bitacoras_colegioabc.idMateriaBitacora', '=', 'vista_materias_grados_grupos.idMateria')
        ->select(
            'bitacoras_tipos.nombreBitacorasTipos',
            'vista_materias_grados_grupos.idGradoGrupoRelacionado',
            'vista_materias_grados_grupos.nombreMateria',
            DB::raw("CONCAT(COALESCE(usuarios.primerNombre, ''), ' ', COALESCE(usuarios.segundoNombre, ''), ' ', COALESCE(usuarios.apellidoPaterno, ''),
            ' ', COALESCE(usuarios.apellidoMaterno, '')) AS nombreAlumno"),
            DB::raw("CONCAT(COALESCE(vista_materias_grados_grupos.nombreGrado, ''), ' ', COALESCE(vista_materias_grados_grupos.nombreGrupo, '')) AS gradoGrupo"),
            'bitacoras_colegioabc.*'
            )
         ->get();
         foreach($Registro as $registro){
            $registro->materiaGradoGrupo = $registro->nombreMateria. ' - ' . $registro->gradoGrupo;
         }
        return response() -> json($Registro, 200);
    }

    public function getMateriasP(){
        $Materia = DB:: table('vista_materias_grados_grupos')
        ->select(
            'idMateria',
            'nombreMateria',
            'idGradoGrupoRelacionado',
            DB::raw("CONCAT(COALESCE(vista_materias_grados_grupos.nombreGrado, ''), ' ', COALESCE(vista_materias_grados_grupos.nombreGrupo, '')) AS gradoGrupo"),
            ) ->get();

        $Materia = $Materia->groupBy('nombreMateria')->map(function ($group) {
            $first = $group->first();

            $nombreGrupos = $group->map(function ($item) {
                return [
                    'idGradoGrupoRelacionado' => $item->idGradoGrupoRelacionado,
                    'nombreGrupo' => $item->gradoGrupo,
                ];
            })->values()->filter(function ($item) {
                return $item['idGradoGrupoRelacionado'] !== null && $item['nombreGrupo'] !== null;
            })->all();

            return [
                'id' => $first-> idMateria,
                'nombreMateria' => $first-> nombreMateria,
                'grupos' => empty($nombreGrupos) ? [] : array_values($nombreGrupos),
            ];
        })->values();
        return response() -> json($Materia, 200);
    }

    public function Tipos(){
        $tiposRegistro = DB::table('bitacoras_tipos')
        ->where('estado','Activo')
        ->Select('idBitacorasTipos','nombreBitacorasTipos')
        ->get();
        return response()->json($tiposRegistro, 200);
    }

    public function getAlumnos(){
        $alumnos = DB::table('usuarios')
        ->leftJoin('vista_usuarios_grupos1', 'usuarios.idUsuario', '=', 'vista_usuarios_grupos1.idUsuario')
        ->select( DB::raw("CONCAT(COALESCE(usuarios.primerNombre, ''), ' ', COALESCE(usuarios.segundoNombre, ''), ' ', COALESCE(usuarios.apellidoPaterno, ''),
        ' ', COALESCE(usuarios.apellidoMaterno, '')) AS nombreAlumno"),
        'usuarios.idUsuario',
        'vista_usuarios_grupos1.idGrupo',
        'usuarios.grado'
        )
        ->where('usuarios.idEscuela', 'COLEGIOABC')
        ->where('usuarios.tipoUsuario','AL')
        ->where('usuarios.estatus','Activo')
        ->get();
        foreach($alumnos as $alumno){
            $alumno->nombreAlumno = $alumno->nombreAlumno . ' (' . $alumno->idUsuario . ')';
        }
        return response()->json($alumnos, 200);
    }

    public function crearBitacora(Request $request){
        $message = '';
        $status = 200;
        try{
            $bitacora = DB::table('bitacoras_colegioabc')->Insert([
                'idMateriaBitacora' => $request -> idMateriaBitacora,
                'idAlumnoBitacora' => $request -> idAlumnoBitacora,
                'idTipoBitacora' => $request -> idTipoBitacora,
                'descripcionBitacora' => $request -> descripcion,
                'fechaPublicacion' => $request -> fechaBitacora,
                'estado' => 'Activo',
            ]);
            $message = 'Registro creado correctamente'; $status = 200;
        } catch (\Exception $e){
            $message = 'Error al ingresar el registro: ' . $e->getMessage();
            $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

    public function editarBitacora(Request $request, $id){
        $id = base64_decode($id);
        $message = '';
        $status = 200;
        try{
            $bitacora = DB::table('bitacoras_colegioabc')
            ->where('idBitacora', $id)
            ->update([
                'idMateriaBitacora' => $request -> idMateriaBitacora,
                'idAlumnoBitacora' => $request -> idAlumnoBitacora,
                'idTipoBitacora' => $request -> idTipoBitacora,
                'descripcionBitacora' => $request -> descripcion,
                'fechaPublicacion' => $request -> fechaBitacora,
            ]);
            $message = 'Registro Actualizado correctamente'; $status = 200;
        } catch (\Exception $e){
            $message = 'Error al editar el registro: ' . $e->getMessage();
            $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

    public function eliminarBitacora(Request $request, $id){
        $id = base64_decode($id);
        $message = '';
        $status = 200;
        try{
            $bitacora = DB::table('bitacoras_colegioabc')
            ->where('idBitacora', $id)
            ->update([
                'estado' => 'Eliminado',
            ]);
            $message = 'Estado Eliminado correctamente'; $status = 200;
        } catch (\Exception $e){
            $message = 'Error al eliminar el registro: ' . $e->getMessage();
            $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

    public function habilitarBitacora(Request $request, $id){
        $id = base64_decode($id);
        $message = '';
        $status = 200;
        try{
            $bitacora = DB::table('bitacoras_colegioabc')
            ->where('idBitacora', $id)
            ->update([
                'estado' => 'Activo',
            ]);
            $message = 'Estado Habilitado correctamente'; $status = 200;
        } catch (\Exception $e){
            $message = 'Error al habilitar el registro: ' . $e->getMessage();
            $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }


}

