<?php

namespace App\Http\Controllers;

use App\Models\Inscripcion;
use App\Models\Participante;
use Illuminate\Http\Request;

class ParticipanteController extends Controller
{
    public function index(Request $request) {
        // Recuperar todos los registros del modelo asociado con el controlador actual
        $data = Participante::latest()->with(['institucion','grado'])->get();
        return response()->json($data);
    }
    public function show($id) {
        $data = Participante::with(['institucion','grado'])->find($id);
        return response()->json($data);
    }
    public function verificar(Request $request) {
        $nombres = $request->get('nombres');
        $apellidos = $request->get('apellidos');
        $participante = Participante::where('nombres',$nombres)
        ->where('apellidos',$apellidos)->first();
        $data = [
            'existe' => $participante ? true : false,
            'datos' => $participante,
        ];
        return response()->json($data);
    }
    public function store(Request $request) {
        $valid = Participante::where('nro_documento',$request->input('nro_documento'))->first();
        if ($valid) {
            // return response()->json('Nro. Documento repetido', 409);
        }

        // Recuperar todos los registros del modelo asociado con el controlador actual
        $model = new Participante;
        $model->nombres = $request->input('nombres');
        $model->apellidos = $request->input('apellidos');
        $model->code = $this->getCode();
        $model->email = $request->input('email');
        $model->documento = $request->input('documento');
        $model->nro_documento = $request->input('nro_documento');
        $model->tipo = $request->input('tipo');
        $model->pais = $request->input('pais');
        $model->ciudad = $request->input('ciudad');
        $model->direccion = $request->input('direccion');
        $model->telefono = $request->input('telefono');
        $model->habilitado = true;
        $model->institucion_id = $request->input('institucion_id');
        $model->grado_id = $request->input('grado_id');
        $model->save();

        $data = [
            'element' => $model,
            'success' => 'Registrado'
        ];
        // Retornar respuesta
        return response()->json($data, 201);
    }
    
    public function update(Request $request, $id) {
        $valid = Participante::where('nro_documento',$request->input('nro_documento'))
        ->where('id','!=',$id)->first();
        if ($valid) {
            // return response()->json('Nro. Documento repetido', 409);
        }
        
        // Recuperar todos los registros del modelo asociado con el controlador actual
        $model = Participante::find($id);
        if (!$model) {
            return response()->json('Elemento no encontrado', 409);
        }
        $model->nombres = $request->input('nombres');
        $model->apellidos = $request->input('apellidos');
        $model->email = $request->input('email');
        $model->documento = $request->input('documento');
        $model->nro_documento = $request->input('nro_documento');
        $model->tipo = $request->input('tipo');
        $model->pais = $request->input('pais');
        $model->ciudad = $request->input('ciudad');
        $model->direccion = $request->input('direccion');
        $model->telefono = $request->input('telefono');
        $model->institucion_id = $request->input('institucion_id');
        $model->grado_id = $request->input('grado_id');
        $model->save();

        $data = ['success' => 'Actualizado'];
        // Retornar respuesta
        return response()->json($data, 200);
    }
    function getCode() {
        $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        // $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        $code = '';
        for ($i = 0; $i < 12; $i++) {
            $code .= $characters[rand(0, strlen($characters) - 1)];
        }
        $valid = Participante::where('code',$code)->first();
        if ($valid) {
            return $this->getCode();
        }
        return $code;
    }
    public function destroy($id) {
        $model = Participante::find($id);
        if (!$model) {
            return response()->json('Elemento no encontrado', 409);
        }
        $valid = Inscripcion::where('participante_id',$id)->first();
        if ($valid) {
            return response()->json('Este participante esta registrado como inscrito', 409);
        }
        $model->delete();

        $data = ['success' => 'Eliminado'];
        return response()->json($data, 200);
    }
}
