<?php

namespace App\Http\Controllers\Api;

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


class NivelEducativoController extends Controller
{

    public function findOne($id)
    {
        $id = base64_decode($id);
        $nivel = DB::table('niveles')->where('idNivel', $id)->first();
        return response()->json($nivel, 200);
    }

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

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

    public function crear(Request $request)
    {
        try {
            DB::table('niveles')->insert([
                'idEscuela' => 'COLEGIOABC',
                'idNivel' => $request->idNivel,
                'estado' => 'Activo',
                'nombreNivel' => $request->nombreNivel,
                'idUsuario' => '',
            ]);
            return response()->json(['mensaje' => 'Nivel 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 nivel: ' . $e->getMessage()], 500);
        }
    }

    public function actualizar(Request $request)
    {
        try {
            DB::table('niveles')
                ->updateOrInsert(
                    ['idNivel' => $request->id],
                    ['idNivel' => $request->idNivel, 'nombreNivel' => $request->nombreNivel]
                );
            // Verificar si existe la fila en la tabla 'grados'
            $exists = DB::table('grados')
                ->where('idNivel', $request->id)
                ->exists();

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


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

            // Si la fila existe, hacer el update
            if ($exists1) {
                DB::table('boletas_periodos')
                    ->where('idNivel', $request->id)
                    ->update(['idNivel' => $request->idNivel]);
            }
            return response()->json(['mensaje' => 'Nivel actualizado exitosamente'], 201);
        } catch (\Exception $e) {

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



    public function eliminar($id)
    {
        $id = base64_decode($id);
        try {
            // Verificar si existe la fila en la tabla 'grados'
            $existsInGrados = DB::table('grados')
                ->where('idNivel', $id)
                ->where('estado', 'Activo')
                ->exists();

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

            // Si la fila existe en alguna de las tablas, devolver un mensaje de error
            if ($existsInGrados || $existsInBoletasPeriodos) {
                return response()->json(['mensaje' => 'No se puede eliminar el nivel porque está asociado a otros registros.'], 400);
            }

            // Si no existe en otras tablas, actualizar el estado en la tabla 'niveles'
            DB::table('niveles')
                ->updateOrInsert(
                    ['idNivel' => $id],
                    ['estado' => 'Eliminado']
                );

            return response()->json(['mensaje' => 'Nivel eliminado exitosamente'], 200);
        } catch (\Exception $e) {
            return response()->json(['mensaje' => 'Error al eliminar el nivel: ' . $e->getMessage()], 500);
        }
    }


    public function habilitar($id)
    {
        $id = base64_decode($id);
        try {
            //code...
            DB::table('niveles')
                ->updateOrInsert(
                    ['idNivel' => $id],
                    ['estado' => 'Activo']
                );

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

    }


}
