<?php

namespace App\Http\Controllers;

use App\Proveedores;
use App\Comunas;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;

class ProveedoresController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'Jefe_Proyecto')
        {
            $datos = DB::table('proveedores')
            ->join('comunas', 'comunas.id_comuna', '=', 'proveedores.id_comuna')
            ->select('id_proveedor', 'proveedores.razon_social', 'proveedores.rut', 'proveedores.codigo', 'proveedores.tipo',
            'proveedores.estado', 'proveedores.foto', 'proveedores.calle', 'proveedores.enumeracion',
            'comunas.comuna', 'proveedores.telefono_emp', 'proveedores.email_emp',
            'proveedores.contacto', 'proveedores.telefono_cont', 'proveedores.email_cont', 'proveedores.fecha')->paginate(30);
            return view('Proveedores.index', compact('datos'));
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    public function search(Request $request)
    {
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'Jefe_Proyecto')
        {
            $search = trim($request->get('search'));
            
            $datos = DB::table('proveedores')
            ->join('comunas', 'comunas.id_comuna', '=', 'proveedores.id_comuna')
            ->select('id_proveedor', 'proveedores.razon_social', 'proveedores.rut', 'proveedores.codigo', 'proveedores.tipo',
            'proveedores.estado', 'proveedores.foto', 'proveedores.calle', 'proveedores.enumeracion',
            'comunas.comuna', 'proveedores.telefono_emp', 'proveedores.email_emp',
            'proveedores.contacto', 'proveedores.telefono_cont', 'proveedores.email_cont', 'proveedores.fecha')
            ->where('razon_social', 'LIKE', '%'.$search.'%')
            ->orWhere('rut', 'LIKE', '%'.$search.'%')
            ->orWhere('codigo', 'LIKE', '%'.$search.'%')
            ->orWhere('telefono_emp', 'LIKE', '%'.$search.'%')
            ->orWhere('email_emp', 'LIKE', '%'.$search.'%')
            ->orWhere('contacto', 'LIKE', '%'.$search.'%')
            ->orderBy('id_proveedor', 'asc')->paginate();

            $output = '';

            if(Auth::user()->user_tipe == "Admin")
            {
                if(count($datos)>0)
                {
                    $contador = 1;
                    foreach($datos as $dato)
                    {
                        $output .= '<tr style="text-align: center">
                                        <td>'.$contador.'</td>
                                        <td>'.$dato->razon_social.'</td>
                                        <td>'.$dato->rut.'</td>
                                        <td>'.$dato->codigo.'</td>
                                        <td>'.$dato->tipo.'</td>
                                        <td>'.$dato->estado.'</td>
                                        <td>
                                            <img class="rounded img-fliud" src="'.asset('storage').'/'.$dato->foto.'" alt="" width="100">
                                        </td>
                                        <td>'.$dato->calle.'</td>
                                        <td>'.$dato->enumeracion.'</td>
                                        <td>'.$dato->comuna.'</td>
                                        <td>'.$dato->telefono_emp.'</td>
                                        <td>'.$dato->email_emp.'</td>
                                        <td>'.$dato->contacto.'</td>
                                        <td>'.$dato->telefono_cont.'</td>
                                        <td>'.$dato->email_cont.'</td>
                                        <td>'.Carbon::parse($dato->fecha)->format('d-m-Y').'</td>
                                        <td>
                                            <div class="align-items-center btn-group">
                                                <a href="Proveedores/'.$dato->id_proveedor.'/edit" class="btn btn-warning">
                                                    <span class="far fa-edit"></span> Editar</a>

                                                <form action="Proveedores/'.$dato->id_proveedor.'" method="post" style="display: inline">
                                                    '.csrf_field().'
                                                    '.method_field('DELETE').'
                    
                                                    <button class="btn btn-danger" type="submit" onclick="return confirm(\'¿Estas Seguro que Deseas Eliminar Este Registro?\');" style="margin-left: 3px; border-radius:5px">
                                                    <span class="fad fa-trash"></span> Eliminar</button>
                                                </form>
                                            </div>
                                        </td>
                                    </tr>';
                        $contador = $contador + 1; 
                    }
                    return response($output);
                }
                else
                {
                    $output .= '<tr><td colspan="17" style="text-align: center">¡Ups..! No Se Encontraron Resultados</td></tr>';
                    return response($output);
                }
            }
            else
            {
                if(count($datos)>0)
                {
                    $contador = 1;
                    foreach($datos as $dato)
                    {
                        $output .= '<tr style="text-align: center">
                                        <td>'.$contador.'</td>
                                        <td>'.$dato->razon_social.'</td>
                                        <td>'.$dato->rut.'</td>
                                        <td>'.$dato->codigo.'</td>
                                        <td>'.$dato->tipo.'</td>
                                        <td>'.$dato->estado.'</td>
                                        <td>
                                            <img class="rounded img-fliud" src="'.asset('storage').'/'.$dato->foto.'" alt="" width="100">
                                        </td>
                                        <td>'.$dato->calle.'</td>
                                        <td>'.$dato->enumeracion.'</td>
                                        <td>'.$dato->comuna.'</td>
                                        <td>'.$dato->telefono_emp.'</td>
                                        <td>'.$dato->email_emp.'</td>
                                        <td>'.$dato->contacto.'</td>
                                        <td>'.$dato->telefono_cont.'</td>
                                        <td>'.$dato->email_cont.'</td>
                                        <td>'.Carbon::parse($dato->fecha)->format('d-m-Y').'</td>
                                        <td>
                                            <a href="Proveedores/'.$dato->id_proveedor.'/edit" class="btn btn-warning">
                                                <span class="far fa-edit"></span> Editar</a>
                                        </td>
                                    </tr>';
                        $contador = $contador + 1; 
                    }
                    return response($output);
                }
                else
                {
                    $output .= '<tr><td colspan="17" style="text-align: center">¡Ups..! No Se Encontraron Resultados</td></tr>';
                    return response($output);
                }
            }
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'Jefe_Proyecto')
        {
            $id_comuna = Comunas::all();
            return view('Proveedores.create', compact('id_comuna'));
        }
        else
        {
            abort(403, 'Accesso Prohibido');
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $campos = [
            'razon_social' => 'required|string|max:40',
            'rut' => 'required|string|max:20',
            'codigo' => 'required|string|max:50',
            'tipo' => 'required|string|max:40',
            'estado' => 'required|string|max:40',
            'foto' => 'required|max:10000|mimes:jpeg,png,jpg',
            'calle' => 'required|string|max:50',
            'enumeracion' => 'required|numeric',
            'id_comuna' => 'required',
            'telefono_emp' => 'required|string|max:50',
            'email_emp' => 'required|email',
            'contacto' => 'required|string|max:40',
            'telefono_cont' => 'required|string|max:50',
            'email_cont' => 'required|email',
            'fecha' => 'required'
        ];

        $Mensaje = ["required" => 'El Campo :attribute Es Requerido'];
        $this->validate($request, $campos, $Mensaje);

        $datosProveedor = request()->except('_token');

        if($request->hasFile('foto'))
        {
            $datosProveedor['foto'] = $request->file('foto')->store('uploads', 'public');
        }
        
        Proveedores::insert($datosProveedor);
        return redirect('Proveedores')->with('Mensaje', '!Proveedor Agregado con Éxito!');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Proveedores  $proveedores
     * @return \Illuminate\Http\Response
     */
    public function show(Proveedores $proveedores)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Proveedores  $proveedores
     * @return \Illuminate\Http\Response
     */
    public function edit($id_proveedor)
    {
        //
        if(Auth::user()->user_tipe == 'Admin' || Auth::user()->user_tipe == 'Jefe_Proyecto')
        {
            $proveedor = Proveedores::findOrFail($id_proveedor);
            $id_comuna = Comunas::all();
            return view('Proveedores.edit', compact('proveedor'))->with('id_comuna', $id_comuna);
        }
        else
        {
            abort(403, 'Acceso Prohibido');
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Proveedores  $proveedores
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id_proveedor)
    {
        $campos = [
            'razon_social' => 'required|string|max:40',
            'rut' => 'required|string|max:20',
            'codigo' => 'required|string|max:50',
            'tipo' => 'required|string|max:40',
            'estado' => 'required|string|max:40',
            'calle' => 'required|string|max:50',
            'enumeracion' => 'required|numeric',
            'id_comuna' => 'required',
            'telefono_emp' => 'required|string|max:50',
            'email_emp' => 'required|email',
            'contacto' => 'required|string|max:40',
            'telefono_cont' => 'required|string|max:50',
            'email_cont' => 'required|email',
            'fecha' => 'required'
        ];

        if($request->hasFile('foto'))
        {
            $campos += ['foto' => 'required|max:10000|mimes:jpeg,png,jpg'];
        }

        $Mensaje = ["required" => 'El Campo :attribute Es Requerido'];
        $this->validate($request, $campos, $Mensaje);

        $datosProveedor = request()->except(['_token', '_method']);

        if($request->hasFile('foto'))
        {
            $proveedor = Proveedores::findOrFail($id_proveedor);

            Storage::delete('public/'.$proveedor->foto);

            $datosProveedor['foto'] = $request->file('foto')->store('uploads', 'public');
        }

        Proveedores::where('id_proveedor', '=', $id_proveedor)->update($datosProveedor);
        return redirect('Proveedores')->with('Mensaje', '!Proveedor Editado con Éxito!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Proveedores  $proveedores
     * @return \Illuminate\Http\Response
     */
    public function destroy($id_proveedor)
    {
        Proveedores::destroy($id_proveedor);
        return redirect('Proveedores')->with('Mensaje', '¡Proveedor Eliminado con Éxito!');
    }
}
