<?php

namespace App\Http\Controllers\Api;

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


class GradoEducativoController extends Controller
{

    public function findOne($id)
    {

        $grado = DB::table('grados')->where('nombreGrado', $id)->first();
        return response()->json($grado, 200);
    }

    public function mostrar()
    {
        $grado = DB::table('vista_grados_niveles')
            ->where('idEscuela', 'COLEGIOABC')
            ->orderBy('estado', 'asc')
            ->get();
        return response()->json($grado, 200);
    }



    public function gradosHabilitados()
    {
        $grado = DB::table('grados')
            ->where('idEscuela', 'COLEGIOABC')
            ->where('estado', 'Activo')
            ->get();
        return response()->json($grado, 200);
    }

    public function crear(Request $request)
    {
        try {
            DB::table('grados')->insert([
                'idEscuela' => 'COLEGIOABC',
                'idGrado' => $request->idGrado,
                'estado' => 'Activo',
                'nombreGrado' => $request->nombreGrado,
                'idNivel' => $request->idNivel,
                'idUsuario' => '',
            ]);
            return response()->json(['mensaje' => 'Grado creado exitosamente'], 201);
        } catch (\Exception $e) {
            if ($e instanceof \PDOException && $e->errorInfo[1] == 1062) {
                return response()->json(['mensaje' => 'Este grado ya ha sido registrado'], 500);
            }
            return response()->json(['mensaje' => 'Error al crear el grado: ' . $e->getMessage()], 500);
        }
    }

    public function actualizar(Request $request)
    {
        try {
            DB::table('grados')
                ->updateOrInsert(
                    ['nombreGrado' => $request->id],
                    [
                        'idGrado' => $request->idGrado,
                        'nombreGrado' => $request->nombreGrado,
                        'idNivel' => $request->idNivel
                    ]
                );

            // Verificar si existe la fila en la tabla 'grados'
            $exists = DB::table('usuarios')
                ->where('grado', $request->id)
                ->exists();

            // Verificar si existe la fila en la tabla 'boletas_periodos'
            $exists1 = DB::table('materias')
                ->where('idGradoGrupoRelacionado', $request->id)
                ->exists();

            // materias_profesores

            $exists2 = DB::table('materias_profesores')
                ->where('idGrupo', $request->id)
                ->exists();


            // Si la fila existe, hacer el update
            if ($exists) {
                DB::table('usuarios')
                    ->where('grado', $request->id)
                    ->update(['grado' => $request->nombreGrado]);
            }

            if ($exists1) {
                DB::table('materias')
                    ->where('idGradoGrupoRelacionado', $request->id)
                    ->update(['idGradoGrupoRelacionado' => $request->nombreGrado]);
            }

            if ($exists2) {
                DB::table('materias_profesores')
                    ->where('idGrupo', $request->id)
                    ->update(['idGrupo' => $request->nombreGrado]);
            }

            return response()->json(['mensaje' => 'Grado actualizado exitosamente'], 201);
        } catch (\Exception $e) {

            return response()->json(['mensaje' => 'Error al actualizar el grado: ' . $e->getMessage()], 500);
        }
    }


    public function eliminar($id)
    {
        try {

            // Verificar si existe la fila en la tabla 'grados'
            $existsInUsers = DB::table('usuarios')
                ->where('grado', $id)
                ->where('estatus', 'Activo')
                ->exists();

            // Verificar si existe la fila en la tabla 'boletas_periodos'
            $existsInMaterias = DB::table('materias')
                ->where('idGradoGrupoRelacionado', $id)
                ->where('estado', 'Activo')
                ->exists();

            // materias_profesores

            $existsInMateriasProfesores = DB::table('materias_profesores')
                ->where('idGrupo', $id)
                ->count();


            if ($existsInUsers || $existsInMaterias || $existsInMateriasProfesores>0) {
                return response()->json(['mensaje' => 'No se puede eliminar el grado porque está asociado a otros registros.'], 400);
            }

            DB::table('grados')
                ->updateOrInsert(
                    ['nombreGrado' => $id],
                    ['estado' => 'Eliminado']
                );
            return response()->json(['mensaje' => 'Grado eliminado exitosamente'], 201);
        } catch (\Exception $e) {
            return response()->json(['mensaje' => 'Error al eliminar el grado: ' . $e->getMessage()], 500);
        }

    }

    public function habilitar($id)
    {
        
        try {
            $grado = DB::table('grados')->where('nombreGrado', $id)->first();

            $existsInGrados = DB::table('niveles')
                ->where('idNivel', $grado->idNivel)
                ->where('estado', 'Eliminado')
                ->exists();

            if ($existsInGrados) {
                return response()->json(['mensaje' => 'No se puede habilitar el nivel'], 400);
            }
            
            DB::table('grados')
                ->updateOrInsert(
                    ['nombreGrado' => $id],
                    ['estado' => 'Activo']
                );

            return response()->json(['mensaje' => 'Grado eliminado exitosamente'], 201);
        } catch (\Exception $e) {
            //throw $th;
            return response()->json(['mensaje' => 'Error al eliminar el grado: ' . $e->getMessage()], 500);
        }

    }


}
