<?php

namespace App\Http\Controllers;
use App\aplicacion;
use App\modulos;
use App\users;
use App\usuarios_app;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;


use Illuminate\Http\Request;

class aplicacionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $aplicacion = aplicacion::orderBy('id', 'desc')->paginate(8);
        $Allaplicaciones = aplicacion::all();
        return view('admin.aplicacion.aplicaciones',[
            'aplicacion'=>$aplicacion,
            'Allaplicaciones' => $Allaplicaciones
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.aplicacion.agregar');
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'nombre' => 'required|unique:aplicacion,nombre',
            'codigo' => 'required|unique:aplicacion,codigo',
            'descripcion' => 'required|',
            'tipo' => 'required',
            'estado' => 'required',
        ]);
        if( empty($request['descripcion']) == null) {
            aplicacion::create([
                'nombre' => $request['nombre'],
                'codigo' => $request['codigo'],
                'descripcion' => $request['descripcion'],
                'tipo' => $request['tipo'],
                'estado' => $request['estado']
            ]);
            return redirect('aplicaciones');
        }
        return redirect('error');
    }
    public function filtrarApp($tipo) {
        $aplicaciones = DB::table('aplicacion')->where('tipo', '=', $tipo)->get();
        return json_encode($aplicaciones);
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $aplicacion = aplicacion::find($id);
        if(!$aplicacion) {
            return redirect('error');
        }
        $desarrolladoresDeLaAplicacion = users::AppDev($id);
        $AllDesarrolladores = DB::table('users')
            ->where('role', 'desarrollador')->get();
        $AllClientes = DB::table('users')
            ->where('role', 'cliente')->get();
        $clientes = users::AppCustomers($id);
        $modulos = DB::table('modulos')->where('aplicacion_id', '=', $aplicacion->id)->orderBy('id', 'desc')->get();
        $usersByRole = users::NotAppUser($id, 'cliente');
        return view('admin.aplicacion.Aplicacion',[
            'aplicacion'=>$aplicacion,
            'modulos'=>$modulos,
            'desarrolladores'=> $desarrolladoresDeLaAplicacion,
            'clientes' => $clientes,
            'AllClientes' => $AllClientes,
            'AllDesarrolladores' => $AllDesarrolladores,
            'usersByRole' => $usersByRole
         ]);
    }

    public function NotAppUser($id, $role) {
        $usersByRole = users::NotAppUser($id,$role);
        return response()->json($usersByRole);
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $request->validate([
            'nombre' => 'required',
            'codigo' => 'required',
            'descripcion' => 'required|',
            'tipo' => 'required',
            'estado' => 'required',
        ]);
        if(Auth::user()->role=='admin'){
            $aplicacion = aplicacion::find($id);
            $aplicacion->nombre =$request->nombre;
            $aplicacion->codigo =$request->codigo;
            $aplicacion->descripcion =$request->descripcion;
            $aplicacion->tipo =$request->tipo;
            $aplicacion->estado =$request->estado;
            $aplicacion->update();
        }
        return redirect ('aplicacion/'.$id);
    }
    public function asignarUsuario(Request $request) {
            foreach($request->users as $user){
                usuarios_app::create([
                    'app_id' => $request->app_id,
                    'user_id' => $user,
                ]);
            }
    }
    public function EliminarUsuarioApp($id) {
        usuarios_app::destroy($id);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        aplicacion::destroy($id);
    }
}
