<?php

namespace App\Http\Controllers\Password;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Mail\CorreoEgreso;
use Illuminate\Support\Facades\Mail;
use App\{RF_Alumno,ConfiguracionEgreso,RegistroEgreso,Carreras,Bitacora,PasswordReset};

class AlumnoController extends Controller
{
    /*Modificada*/
    public function index(Request $request, $token){
        
        $new_pass = '';
        if ($token!="" && strlen($token)>=22 ) {
            
            $token = explode("_",$token);
            $token = explode("@",$token[1]);
            $idPR = $token[0]; //id de la tabla
            
            $token = explode("**",$token[1]);
            $no_control = str_ireplace("$",'',$token[0]);

        } else {
            return redirect('/');
        }

        $estado_pass_reset = '';
        
        $fecha_actual = $this->obtenerFecha_Actual();
        $tiempo_expirado = PasswordReset::where("no_control",$no_control)->where('id', $idPR)->first();
        
        if ($tiempo_expirado!=null) {
            $fecha_caduca = date($tiempo_expirado->fecha_caduca);

            if ( ($fecha_actual <= $fecha_caduca) && $tiempo_expirado->estado == 1) {
                $estado_pass_reset = $tiempo_expirado->estado;
            }else{
                $no_control = "";
                $estado_pass_reset = $tiempo_expirado->estado;
            }
        } else {
            $no_control = "";
            $estado_pass_reset = '8';
        } 
            

        return view('index_new', compact('no_control','estado_pass_reset'));
    }

    /*Modificada*/
    public function correo_reset_pass(Request $request){
        $correo = $request->correo;
        if ($correo != null) {
            $alumno = RF_Alumno::where('correo_institucional',$correo)->first();
            
            if ($alumno != null) {
                if ($alumno->correo_institucional != null) {
                    $fecha_actual = $this->obtenerFecha_Actual();
                    $fecha_caduca = strtotime ( '+30 minute' , strtotime ($fecha_actual)) ;
                    $fecha_caduca = date('Y-m-d H:i:s',$fecha_caduca);

                    $pass = PasswordReset::create([
                        'no_control'=>$alumno->id,
                        'estado'=>1,
                        'fecha_caduca'=>$fecha_caduca
                    ]);

                    $token = $this->generar_token($alumno->id, $pass->id);

                    $mensaje = array(
                        'nombre'        =>  $alumno->nombre,
                        'correo'        =>  $correo,
                        'token'         => $token,
                        'concepto'      =>  'reset_pass'
                    );
                    
                    Mail::to($mensaje['correo'])->send(new CorreoEgreso($mensaje));
                    
                    Bitacora::create([ 'fk_idFolio' => $alumno->id."-00" ]);

                    return response()->json([
                        'mensaje'=>'Se ha enviado el correo para restablecer su contraseña.',
                        'estado'=>'ok_correo_reset'
                    ]);   

                }else{
                    return response()->json([
                        'estado'=>'error_pass',
                        'mensaje'=>'No cuentas con correo institucional, favor de comunicarse a las oficinas del ITZ'
                    ]);
                } 
            }else{
                return response()->json([
                    'estado'=>'error_control',
                    'mensaje'=>'Tu número de control es incorrecto'
                ]);
            }
        }
        
    }

    /*Modificada*/
    public function update_new_pass(Request $request,$no_control){
        $new_pass = $request->new_pass;
        $confirmar_pass = $request->confirmar_pass;
        $expresion = "/^([A-Z])+(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{7}$/"; //Primero es una mayuscula
        
        if($new_pass != null || $new_pass != '' && $confirmar_pass != null || $confirmar_pass != ''){
            if ($new_pass == $confirmar_pass) {
                //$passEncryptada = md5($new_pass);
                //$passEncryptada = Hash::make($passEncryptada);
                $update_estado_pass = PasswordReset::where('no_control',$no_control)->first();
                $update_estado_pass->where('no_control',$no_control)->update(['estado'=>0]);
                
                $alumno = RF_Alumno::where('id',$no_control)->first();
                    
                if ($alumno->nip!="") {
                    $a = explode("-", $alumno->nip);
                    if (count($a)>1) {
                        $alumno->nip = $new_pass."-".$a['1'];    
                    } else {
                        $alumno->nip = $new_pass."-0";
                    }
                    
                } else {
                    $alumno->nip = $new_pass."-0";
                }

                //$alumno->password = $passEncryptada;
                $alumno->save();
                // dd('Son iguales');

                return response()->json([
                    'estado'=>'ok',
                    'mensaje'=>'La contraseña se ha actualizado con exito'
                ]);
            }else{
                return response()->json([
                    'estado'=>'error',
                    'mensaje'=>'La contraseña no coinciden'
                ]);
            }
        }else{
            return response()->json([
                'estado'=>'error_vacios',
                'mensaje'=>'Por favor, completa los campos'
            ]);
        }

    }

    public function generar_token($no_control, $id){
        $desde_letra = 'A';
        $hasta_letra = 'Z';
        $desde_numero = 1;
        $hasta_numero = 9;

        $letra_rand_i = chr(rand(ord($desde_letra),ord($hasta_letra)));
        $numero_rand1i = rand($desde_numero,$hasta_numero);
        $numero_rand2i = rand($desde_numero,$hasta_numero);
        $numero_rand3i = rand($desde_numero,$hasta_numero);

        $letra_rand_f = chr(rand(ord($desde_letra),ord($hasta_letra)));
        $numero_rand1f = rand($desde_numero,$hasta_numero);
        $numero_rand2f = rand($desde_numero,$hasta_numero);
        $numero_rand3f = rand($desde_numero,$hasta_numero);

        $first_cuatro = $letra_rand_i.$numero_rand1i.$numero_rand2i.$numero_rand3i;
        $end_cuatro = $letra_rand_f.$numero_rand1f.$numero_rand2f.$numero_rand3f;
        
        $num_c = substr($no_control,0,4).'$'.substr($no_control,4,8);
        $token = $first_cuatro.'_'.$id.'@'.$num_c.'**'.$end_cuatro;
        // print_r($numero_rand);
        return $token;
    }

    public function obtenerFecha_Actual(){
        $timezone = 'America/Mexico_City';
        date_default_timezone_set($timezone);
        $fecha_actual = date('Y-m-d H:i:s');
        return $fecha_actual;
    }

}
