<?php

namespace App\Http\Controllers\Api;

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


class CategoriasMateriasController extends Controller
{

    public function findOne($id)
    {

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

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

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

    public function crear(Request $request)
    {
        try {
            DB::table('materias_categorias')->insert([
                'idEscuela' => 'COLEGIOABC',
                'categoria' => $request->categoria,
                'estado' => 'Activo',
                'ordenBoleta' => $request->ordenBoleta,
                'idUsuario' => '',
            ]);
            return response()->json(['mensaje' => 'Categoria creada exitosamente'], 201);
        } catch (\Exception $e) {
            if ($e instanceof \PDOException && $e->errorInfo[1] == 1062) {
                return response()->json(['mensaje' => 'Esta categoría ya ha sido registrada'], 500);
            }
            return response()->json(['mensaje' => 'Error al crear la Categoria: ' . $e->getMessage()], 500);
        }
    }

    public function actualizar(Request $request)
    {
        try {
            DB::table('materias_categorias')
                ->updateOrInsert(
                    ['categoria' => $request->id],
                    ['categoria' => $request->categoria, 'ordenBoleta' => $request->ordenBoleta,]
                );
            return response()->json(['mensaje' => 'Categoria actualizada exitosamente'], 201);
        } catch (\Exception $e) {

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


    public function eliminar($id)
    {
        $id = iconv('ISO-8859-1','UTF-8',base64_decode($id));
        try {

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

            if ($existsInMaterias ) {
                return response()->json(['mensaje' => 'No se puede eliminar la categoría porque está asociado a otros registros.'], 400);
            }

            DB::table('materias_categorias')
                ->updateOrInsert(
                    ['categoria' => $id],
                    ['estado' => 'Eliminado']
                );
            return response()->json(['mensaje' => 'Categoria eliminada exitosamente'], 201);
        } catch (\Exception $e) {
            return response()->json(['mensaje' => 'Error al eliminar la Categoria: ' . $e->getMessage()], 500);
        }

    }

    public function habilitar($id)
    {
        $id = iconv('ISO-8859-1','UTF-8',base64_decode($id));
        try {
            DB::table('materias_categorias')
                ->updateOrInsert(
                    ['categoria' => $id],
                    ['estado' => 'Activo']
                );
            return response()->json(['mensaje' => 'Categoria eliminado exitosamente'], 201);
        } catch (\Exception $e) {
            //throw $th;
            return response()->json(['mensaje' => 'Error al habilitar la Categoria: ' . $e->getMessage()], 500);
        }

    }


}
