<?php

namespace App\Http\Controllers\Api;

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


class GrupoController extends Controller
{

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

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

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

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

    public function actualizar(Request $request)
    {
        try {
            DB::table('grupos')
                ->updateOrInsert(
                    ['idGrupo' => $request->id],
                    ['idGrupo' => $request->idGrupo, 'nombreGrupo' => $request->nombreGrupo,]
                );


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


            // $exists1 = DB::table('materias')
            //     ->where('idGradoGrupoRelacionado', $request->id)
            //     ->exists();

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

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

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

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


    public function eliminar($id)
    {
        $id = base64_decode($id);
        try {

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


            $existsInMaterias = DB::table('materias')
                ->where('idGradoGrupoRelacionado', $id)
                ->where('estado', 'Activo')
                ->exists();

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

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

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

    }

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

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

    }


}
