<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Mail\Email;
use App\Parametro;
use App\Radicado;
use App\Tipo_Tramite;
use App\User_Public;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;

class FrontController extends Controller
{

    public function BuscarRadicado(Request $request)
    {

        $codigo = $request->codigo;

        $buscado = true;

        $radicados = [];

        if ($codigo == "") {
            return (new Response('Código en blanco', 400));
        }

        $radicados = Radicado::where('codigo', $codigo)
            ->get();

        $final = Parametro::where('clave', 'estado_final')->get()->first();

        if (count($radicados) == 0) {
            return (new Response('Código no encontrado', 404));
        }

        foreach ($radicados as $r) {

            $tipo = $r->TipoRadicado;
            $estado = $r->Estado;
            $tramites = $r->Tramites;

            foreach ($r->Tramites as $t) {
                $a = $t->Adjuntos;
                $e = $t->Estado;
                $t->TipoTramite = Tipo_Tramite::find($t->id_tipo_tramite);
            }

            $dias = $tipo->dias_respuesta;

            $r->fecha_limite = $r->FechaLimite();

            // die (($r->Tramites));
        }

        $result = [
            'radicados' => $radicados,
            'estado_final' => $final,

        ];

        return (new Response($result, 200));
    }

    public function GuardarUsuarioPublico(Request $request)
    {
        $up = new User_Public();
        $up->email = $request->email;
        $up->password = Hash::make($request->password);
        $up->tipo_documento = $request->tipo_documento;
        $up->documento = $request->documento;
        $up->nombre1 = $request->nombre1;
        $up->nombre2 = $request->nombre2;
        $up->apellido1 = $request->apellido1;
        $up->apellido2 = $request->apellido2;
        $up->telefono = $request->telefono;
        $up->celular = $request->celular;
        $up->direccion = $request->direccion;
        $up->cod_dpto = $request->cod_dpto;
        $up->cod_ciudad = $request->cod_ciudad;

        $up->api_token = sha1("sivuba-registro" . time());

        $up->save();

        Mail::to($up->email)->send(((new Email($up, 'Registro'))->ConfigurarFrom()));

        return (new Response($up, 200));
    }

    public function ValidarDuplicado(Request $request)
    {
        $duplicado = User_Public::where('email', $request->email)->get();

        if (count($duplicado) > 0) {
            return (new Response('Correo ya registrado', 404));
        }

        $duplicado = User_Public::where('documento', $request->documento)->where('tipo_documento', $request->tipo_documento)->get();

        if (count($duplicado) > 0) {
            return (new Response('Número de documento ya registrado', 404));
        }

        return (new Response($duplicado, 200));
    }

    public function VerificarToken($token)
    {
        $usuario = User_Public::where('api_token', $token)->get();

        if (count($usuario) != 1) {
            return (new Response('Cuenta de Usuario no Encontrada', 404));
        }

        if ($usuario[0]->estado != 0) {
            return (new Response('Cuenta ya verificada', 404));
        }

        $usuario[0]->estado = 1;

        $usuario[0]->save();
        return (new Response(200));
    }

    public function LoginPublico(Request $request)
    {
        $user = User_Public::where('email', $request->email)->get();

        if (count($user) != 1) {

            return (new Response('El correo o la contraseña son incorrectos', 404));
        }

        if (!Hash::check($request->password, $user[0]->password)) {
            return (new Response('El correo o la contraseña son incorrectos', 404));
        }

        if ($user[0]->estado == 0) {
            return (new Response('Cuenta sin Verificar', 404));
        }

        $user[0]->api_token = sha1("sivuba-registro" . time());
        $user[0]->save();

        return (new Response($user[0], 200));
    }

    public function ResetPass($correo)
    {
        $correo = User_Public::where('email', $correo)->get();

        if (count($correo) != 1) {

            return (new Response('El correo no existe', 404));
        }

        Mail::to($correo[0]->email)->send(((new Email($correo[0], 'Reset'))->ConfigurarFrom()));
    }

    public function CambiarPass(Request $request)
    {
        $usuario = User_Public::where('api_token', $request->token)->get();

        if (count($usuario) != 1) {

            return (new Response('URL no valida', 404));
        }

        $usuario[0]->password = Hash::make($request->password);
        $usuario[0]->api_token = sha1("sivuba-registro" . time());

        $usuario[0]->save();
        return (new Response(200));

    }

    public function UpdateUserPublico(Request $request)
    {
        $up = User_Public::find($request->id);

        $up->nombre1 = $request->nombre1;
        $up->nombre2 = $request->nombre2;
        $up->apellido1 = $request->apellido1;
        $up->apellido2 = $request->apellido2;
        $up->telefono = $request->telefono;
        $up->celular = $request->celular;
        $up->direccion = $request->direccion;
        $up->cod_dpto = $request->cod_dpto;
        $up->cod_ciudad = $request->cod_ciudad;

        $up->save();

        return (new Response($up, 200));
    }

}
