<?php

namespace App\Http\Controllers\Admin;

use App\Model\Dependencia;
use App\Model\DependenciaUsuario;
use App\Model\Role;
use App\Model\RolesUsuario;
use App\Model\User;
use App\Model\Usuario;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Mockery\Exception;
use Yajra\Datatables\Datatables;
use Illuminate\Support\Facades\DB;

class DependenciaController extends Controller
{
    public function getIndex()
    {
        return view('pages.admin.dependencia.index');
    }

    public function getIndexUsuario()
    {
        return view('pages.admin.dependencia.usuario.index');
    }

    public function getEditarUsuario($id)
    {
        $model = new User();
        $user = $model->findOrFail($id);

        $model = new RolesUsuario();
        $rolesUsuario = $model->roles_usuario()
            ->where('role_user.role_id', '=', config('constants.ROLES.DEPENDENCIA'))
            ->where('role_user.user_id', '=', $user['id'])
            ->firstOrFail();

        return view('pages.admin.dependencia.usuario.editar')->with('rolesUsuario', $rolesUsuario);
    }

    public function postIndex(Request $request)
    {
        try
        {
            $model = new Dependencia();
            $dependencia = $model->dependencia()
                ->get();

            return Datatables::of($dependencia)->make(true);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postAgregar(Request $request)
    {
        try
        {
            $model = new Dependencia();
            $dependencia = $model->create([
                "nombre" => $request->input('nombre')
            ]);

            return response()->json($dependencia);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postEditar(Request $request)
    {
        try
        {
            $model = new Dependencia();
            $dependencia = $model->find($request->input('id'));
            $dependencia['nombre'] = $request->input('nombre');
            $dependencia->save();

            return response()->json($dependencia);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postEliminar(Request $request)
    {
        try
        {
            $model = new Dependencia();
            $dependencia = $model->find($request->input('id'));
            $dependencia->delete();

            return response()->json($dependencia);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postUsuario(Request $request)
    {
        try
        {
            $model = new DependenciaUsuario();
            $dependenciaUsuario = $model->dependencia_usuario($request->input('id_usuario'))
                ->whereNull('dependencia.deleted_at')
                ->get();

            return Datatables::of($dependenciaUsuario)->make(true);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postAgregarUsuario(Request $request)
    {
        try
        {
            $model = new DependenciaUsuario();
            $dependenciaUsuario = $model->create([
                "id_dependencia" => $request->input('id_dependencia'),
                "id_usuario" => $request->input('id_usuario')
            ]);

            return response()->json($dependenciaUsuario);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }

    public function postEliminarUsuario(Request $request)
    {
        try
        {
            $model = new DependenciaUsuario();
            $dependenciaUsuario = $model->where('id_dependencia', '=', $request->input('id_dependencia'))
                ->where('id_usuario', '=', $request->input('id_usuario'));
            $dependenciaUsuario->delete();

            return response()->json($dependenciaUsuario);
        }
        catch (Exception $e)
        {
            return response()->json(null);
        }
    }
}
