<?php

namespace App\Http\Controllers;

use App\Area;
use App\Http\Controllers\Controller;
use App\Parametro;
use App\Radicado;
use App\Adjunto;
use App\Solicitante;
use App\Tipo_Rad_Portal;
use App\AreaTipoRadicadoPortal;
use App\User_Public;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class PortalController extends Controller
{
    public function ObtenerSoli($api_token)
    {
        $user_public = User_Public::where('api_token', $api_token)
            ->get()
            ->first();

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

    public function ReadAreasActivasPortal()
    {

        $areas = Area::where('disponible_portal', 1)
            ->where('estado', 1)
            ->orderBy('nombre', 'asc')->get();
        return (new Response($areas, 200));

    }

    public function ReadTramitesxArea(Request $request)
    {
        $datos = $request->filter;
        $area = ($datos['filters'][0]['value']);
        $tra = AreaTipoRadicadoPortal::where('idArea', $area)
                                    ->where('Disponibilidad', 1)
                                    ->get();

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

    public function GuardarSolicitud(Request $request)
    {
        try {
            $rad = new Radicado();

            $estado = Parametro::where('clave', 'estado_inicial')->get()->first();

            $rad->id_estado = $estado->valor;
            $rad->codigo = $this->GeneraCodigo();

            $rad->asunto = $request->asunto;
            $rad->descripcion = $request->descripcion;
            $rad->id_tipo_radicado = $request->cmbTramites;
            $rad->id_area = $request->cmbAreas;
            $rad->id_usuario = 30;
            $rad->generado_portal = 1;

            $rad->save();

            $usuario = User_Public::where('api_token', $request->token)
                ->get()
                ->first();

            $tipo_doc = "";

            if ($usuario->tipo_documento == 1) {
                $tido_doc = 'CC';
            } elseif ($usuario->tipo_documento == 2) {
                $tido_doc = 'TI';
            } elseif ($usuario->tipo_documento == 3) {
                $tido_doc = 'CE';
            }

            $solicitante = Solicitante::where('tipo_documento', $tipo_doc)
                ->where('identificacion', $usuario->documento)
                ->get()
                ->first();

            if ($solicitante == null) {
                $solicitante = new Solicitante();
                $solicitante->tipo_documento = $tipo_doc;
                $solicitante->identificacion = $usuario->documento;
                $solicitante->nombres = $usuario->nombre1 . ' ' . $usuario->nombre2;
                $solicitante->apellidos = $usuario->apellido1 . ' ' . $usuario->apellido2;
                $solicitante->direccion = $usuario->direccion;
                $solicitante->telefono = $usuario->telefono;
                $solicitante->celular = $usuario->celular;
                $solicitante->email = $usuario->email;
                $solicitante->id_tipo_solicitante = 1;
                $solicitante->estado = 1;

                $solicitante->save();
            }

            //die (print_r($datos['Idsolicitantes']));

            $rad->solicitantes()->detach();
            $rad->solicitantes()->attach($solicitante);

            if (isset($_FILES['files']) && $_FILES['files'] != null) {

                if ($request->file('files') != null) {
                    //die($request->file('files')->getClientOriginalName());
                    $path = public_path() . '/../../public_html' . '/uploads/' . $rad->codigo . '/';
                    $request->file('files')->move(
                        $path, $request->file('files')->getClientOriginalName()
                    );

                    $adjunto = new Adjunto();
                    $adjunto->denominacion = $request->file('files')->getClientOriginalName();
                    $adjunto->ruta = $path;
                    $adjunto->url = '/uploads/' . $rad->codigo . '/' . $adjunto->denominacion;
                    $adjunto->extension = $request->file('files')->getClientOriginalExtension();

                    $adjunto->save();

                    $rad->adjuntos()->attach($adjunto->id);
                }

            }
            //$sol = $datos['Idsolicitantes']; //explode(',', $datos['Idsolicitantes']);

            /* foreach ($sol as $s) {
            if ($s) {
            $rad->solicitantes()->attach($s);
            }
            } */

            //Guardar adjuntos
            //$archivos = scandir(public_path() . '/tmpDocs/' . $datos['guid']);

            // if (!file_exists(public_path() . '/../../public_html' . '/uploads/' . $rad->codigo . '/')) {
            //     mkdir(public_path() . '/../../public_html' . '/uploads/' . $rad->codigo . '/', 0777, true);
            // }

            // foreach ($archivos as $a) {
            //     if ($a != '.' && $a != '..') {

            //         $partes_ruta = pathinfo(public_path() . '/tmpDocs/' . $datos['guid'] . '/' . $a);

            //         $adjunto = new Adjunto();
            //         $adjunto->denominacion = $a;
            //         $adjunto->ruta = public_path() . '/../../public_html' . '/uploads/' . $rad->codigo . '/' . $a;
            //         $adjunto->url = '/uploads/' . $rad->codigo . '/' . $adjunto->denominacion;
            //         $adjunto->extension = $partes_ruta['extension'];

            //         copy(public_path() . '/tmpDocs/' . $datos['guid'] . '/' . $a, public_path() . '/../../public_html' . '/uploads/' . $rad->codigo . '/' . $a);

            //         $adjunto->save();

            //         //die (print_r($adjunto));

            //         $rad->adjuntos()->attach($adjunto->id);

            //     }
            // }

            return (new Response($rad, 200));

        } catch (\Exception $e) {
            return $e->getMessage();
        }

    }

    private function GeneraCodigo()
    {
        $generado = "";

        $posibles = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        $ultimo = "";

        for ($i = 1; $i <= 10; $i++) {
            $r = rand(0, strlen($posibles) - 1);
            $letra = substr($posibles, $r, 1);
            if ($letra == $ultimo) {
                $i = $i - 1;
            } else {
                $ultimo = $letra;
                $generado .= $letra;
            }
        }

        $sql = "SELECT * FROM radicado WHERE codigo ='$generado'";

        $otros = Radicado::where('codigo', $generado);

        $existe = false;

        foreach ($otros as $d) {
            $existe = true;
        }

        if ($existe) {
            $generado = $this->GeneraCodigo();
        }

        return $generado;
    }
}
