<?php

namespace App\Http\Controllers\Api;

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

class PeriodosBoletaController extends Controller
{
    public function mostrarTodos()
    {
        $periodoBoleta = DB::table('boletas_periodos')
        ->leftJoin('niveles', 'boletas_periodos.idNivel', '=','niveles.idNivel')
        ->select(
            'boletas_periodos.idPeriodo',
            'boletas_periodos.nombrePeriodo',
            'boletas_periodos.idNivel',
            'boletas_periodos.ordenBoleta',
            'boletas_periodos.predeterminado',
            'boletas_periodos.estado',
            'niveles.nombreNivel'
        )->where('boletas_periodos.idEscuela', 'COLEGIOABC')->get();
        return response()->json($periodoBoleta);
    }

    public function crear(Request $request)
    {
        $message = '';
        $status = 0;
        try {
            $periodoBoleta = DB::table('boletas_periodos')->insert([
                'idEscuela' => 'COLEGIOABC',
                'nombrePeriodo' => $request->nombre,
                'idPeriodo' => $request->clave,
                'idNivel' => $request->nivel,
                'ordenBoleta' => $request->orden,
                'predeterminado' => $request->predeterminado,
                'estado' => 'Activo'
            ]);
            $message = 'Periodo de boleta creado correctamente'; $status = 200;
        } catch (\Exception $e) {
            $message = 'Error al crear el periodo de boleta'; $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

    public function editar(Request $request, $id)
    {
        $id = base64_decode($id);
        $message = '';
        $status = 0;
        try {
            $periodoBoleta = DB::table('boletas_periodos')
                ->where('idPeriodo', $id)
                ->update([
                    'nombrePeriodo' => $request->nombre,
                    'idNivel' => $request->nivel,
                    'ordenBoleta' => $request->orden,
                    'predeterminado' => $request->predeterminado
                ]);
            $message = 'Periodo de boleta actualizado correctamente'; $status = 200;
        } catch (\Exception $e) {
            $message = 'Error al actualizar el periodo de boleta'; $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

    public function eliminarEstado($id)
    {
        $id = base64_decode($id);
        $message = '';
        $status = 0;
        try {
            $periodoBoleta = DB::table('boletas_periodos')
                ->where('idPeriodo', $id)
                ->update([
                    'estado' => 'Eliminado'
                ]);
            $message = 'Periodo de boleta deshabilitado correctamente'; $status = 200;
        } catch (\Exception $e) {
            $message = 'Error al deshabilitar el periodo de boleta'; $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }
    public function habilitarEstado($id)
    {
        $id = base64_decode($id);
        $message = '';
        $status = 0;
        try{
            $periodo = DB::table('boletas_periodos')->where('idPeriodo', $id)->first();
            $existsInNivel = DB::table('niveles')
                ->where('idNivel', $periodo -> idNivel)
                ->where('estado', 'Eliminado')
                ->exists();

                if ($existsInNivel) {
                    return response()->json(['message' => 'El nivel necesita estar habilitado'], 400);
                }
                $periodoBoleta = DB::table('boletas_periodos')
                    ->where('idPeriodo', $id)
                    ->where('idEscuela', 'COLEGIOABC')
                    ->update([
                        'estado' => 'Activo'
                    ]);
                $message = 'Periodo de boleta habilitado correctamente'; $status = 200;
        } catch (\Exception $e) {
            $message = 'Error al habilitar el periodo de boleta'; $status = 500;
        }
        return response()->json(['mensaje' => $message], $status);
    }

}
