<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use App\Depoimento;
use App\Produto;
use App\Solucao;
use App\Log;
use App\Rules\SecureImage;
use Illuminate\Support\Facades\DB;

class DepoimentoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if (Gate::denies('depoimentos-view')){
            abort(403, "Não autorizado");
        }

        $objs = Depoimento::orderBy('id', 'DESC')->paginate(30);
        $caminhos = [
            ['url' => '/admin', 'titulo' => 'Admin'],
            ['url' => '', 'titulo' => 'Depoimentos'],
        ];
        return view('admin.depoimento.index', compact('objs', 'caminhos'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        if (Gate::denies('depoimentos-create')){
            abort(403, "Não autorizado");
        }

        $produtos = Produto::all();
        $solucaos = Solucao::all();
        $caminhos = [
            ['url' => '/admin', 'titulo' => 'Admin'],
            ['url' => route('depoimento.index'), 'titulo' => 'Depoimentos'],
            ['url' => '', 'titulo' => 'Adicionar'],
        ];
        return view('admin.depoimento.adicionar', compact('caminhos', 'produtos', 'solucaos'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        if (Gate::denies('depoimentos-create')){
            abort(403, "Não autorizado");
        }

        $request->validate([
            'autor' => 'required|max:255',
            'image' => ['file',
                        new SecureImage,
                ],
        ]);

        $obj = new \App\Depoimento();
        $autorFile = '';

        if ($request->hasFile('image') && $request->file('image')->isValid()) {
            $autor = uniqid(date('HisYmd'));
            $extension = $request->image->extension();
            $autorFile = "{$autor}.{$extension}";
            $upload = $request->image->storeAs(config('app.folder').'depoimento', $autorFile);
            if ( !$upload )
                return redirect()
                            ->back()
                            ->with('error', 'Falha ao fazer upload')
                            ->withInput();
        }  

        $obj->autor = $request['autor'];
        $obj->image = $autorFile;
        $obj->description_pt = $request['description_pt'];
        $obj->description_es = $request['description_es'];
        $obj->description_en = $request['description_en'];
        $obj->empresa = $request['empresa'];

        $obj->save();

        if ($request['produtos']) {
            foreach($request['produtos'] as $produto){
                $cli = Produto::find($produto);
                $obj->adicionarProduto($cli);
            }
        }

        if ($request['solucaos']) {
            foreach($request['solucaos'] as $solucao){
                $f = Solucao::find($solucao);
                $obj->adicionarSolucao($f);
            }
        }

        $logs = new Log();
        $logs->insertLog('Depoimento', $obj->id);
        
        return redirect()->route('depoimento.index')->with('status', 'Registro Salvo!');
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        if (Gate::denies('depoimentos-edit')){
            abort(403, "Não autorizado");
        }

        $obj = Depoimento::with('produtos', 'solucaos')->find($id);
        
        $produtos = Produto::all();
        $solucaos = Solucao::all();
       
        $caminhos = [
            ['url' => '/admin', 'titulo' => 'Admin'],
            ['url' => route('depoimento.index'), 'titulo' => 'Depoimentos'],
            ['url' => '', 'titulo' => 'Editar'],
        ];
        return view('admin.depoimento.editar', compact('obj','caminhos', 'produtos', 'solucaos'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        if (Gate::denies('depoimentos-edit')){
            abort(403, "Não autorizado");
        }

        $request->validate([
            'autor' => 'required|max:255',
            'image' => ['file',
                        new SecureImage,
                ],
        ]);

        $obj = Depoimento::find($id);

        $autorFile = '';

        if ($request->hasFile('image') && $request->file('image')->isValid()) {
            $autor = uniqid(date('HisYmd'));
            $extension = $request->image->extension();
            $autorFile = "{$autor}.{$extension}";
            $upload = $request->image->storeAs(config('app.folder').'depoimento', $autorFile);
            if ( !$upload )
                return redirect()
                            ->back()
                            ->with('error', 'Falha ao fazer upload')
                            ->withInput();
        } else {
            $autorFile = $request['old_image'];
        }

        $obj->autor = $request['autor'];
        $obj->image = $autorFile;
        $obj->description_pt = $request['description_pt'];
        $obj->description_es = $request['description_es'];
        $obj->description_en = $request['description_en'];
        $obj->empresa = $request['empresa'];
        
        $obj->save();
                
        $logs = new Log();
        $logs->updateLog('Depoimento', $id);        
        
        return redirect()->route('depoimento.edit', $id )->with('status', 'Registro Atualizado!');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (Gate::denies('depoimentos-delete')){
            abort(403, "Não autorizado");
        }

        Depoimento::find($id)->delete();

        $logs = new Log();
        $logs->deleteLog('Depoimento', $id);  

        return redirect()->route('depoimento.index')->with('status', 'Registro Excluído!');
    }

    //Adicionar relacioautornto de rule com usuario    
    public function produtoStore(Request $request, $id)
    {
        $depoimento = Depoimento::find($id);
        $dados = $request->all();
        
        if (@$dados['produtos']) {
            foreach($dados['produtos'] as $produto){
                $produto = Produto::find($produto);
                $depoimento->adicionarProduto($produto);
            }
        }
        
        return redirect()->back()->with('status', 'Produto(s) para o depoimento registrado!');;

    }

    //Remover relacioautornto de Permissao com Depoimento
    public function produtoDestroy($id, $produto_id)
    {
        $depoimento = Depoimento::find($id);
        $produto = Produto::find($produto_id);
        $depoimento->removeProduto($produto);

        return redirect()->back();
    }

    //Adicionar relacioautornto de solucao com depoimento    
    public function solucaoStore(Request $request, $id)
    {
        $depoimento = Depoimento::find($id);
        $dados = $request->all();
        if ($dados['solucaos']) {
            foreach($dados['solucaos'] as $solucao){
                $solucao = Solucao::find($solucao);
                $depoimento->adicionarSolucao($solucao);
            }
        }
        
        return redirect()->back()->with('status', 'Solucao(s) para o depoimento registrado!');;

    }

    //Remover relacioautornto de Permissao com Depoimento
    public function solucaoDestroy($id, $solucao_id)
    {
        $depoimento = Depoimento::find($id);
        $solucao = Solucao::find($solucao_id);
        $depoimento->removeSolucao($solucao);

        return redirect()->back();
    }

    public function produtoDel(Request $request )
    {
        
        
        $depoimento = Depoimento::with('produtos')->find($request['depoimento'] );
        $produto = Produto::find($request['item']);
        
        $depoimento->removeProduto($produto);

        // $obj = Depoimento::with('produtos')->where('id', '=', $request['depoimento'])->get();
        $obj = DB::table('depoimento_produto')->join('produtos', 'produtos.id', '=', 'depoimento_produto.produto_id')
                    ->where('depoimento_produto.depoimento_id', '=', $request['depoimento'])
                    ->select('produtos.*')
                    ->get();
        
        $output = '<table class="table table-striped">
                    <thead>
                        <tr>
                            <th> Id </th>
                            <th> Título </th>
                            <th> Ações </th>
                        </tr>
                    </thead>
                    <tbody>';
        if(isset($obj)) {
            if(count(@$obj) > 0) {
                foreach($obj as $row) {
                    $output .= '
                    
                    <tr>
                    <td>'.$row->id.'</td>
                    <td>'.$row->name.'</td>
                    <td><form action='. route('depoimento.produto.del') .'
                    method="post" class=" ">
                    '. method_field('DELETE') .'
                    '. csrf_field() .'
                    <button title="Deletar" class="btn btn-icons btn-inverse-danger  produtoDepoimentoDel"  
                        data-token="'. csrf_token() .'" data-depoimento="'.$request['depoimento'].'"  data-produto="'.$row->id.'">
                        <i class="mdi mdi-delete "></i></button>
                </form></td>
                    </tr>
                    ';
                }

            } else {
                $output .= '<tr>
                                <td colspan="6">Nenhum registro encontrado.</td>
                            </tr>';
            }
        } else {
            $output .= '<tr>
                            <td colspan="6">Nenhum registro encontrado.</td>
                        </tr>';
        }
        $output .= '</tbody></table>';


        $response = array(
            'status' => 'success',
            'msg' => 'Setting created successfully',
            'output' => $output,
        ); 
        return $response;
    }

    public function solucaoDel(Request $request )
    {
        
        
        $depoimento = Depoimento::with('solucaos')->find($request['depoimento'] );
        $solucao = Solucao::find($request['item']);
        
        $depoimento->removeSolucao($solucao);
        
        // $obj = Depoimento::with('solucaos')->where('id', '=', $request['depoimento'])->get();
        $obj = DB::table('depoimento_solucao')->join('solucaos', 'solucaos.id', '=', 'depoimento_solucao.solucao_id')
                    ->where('depoimento_solucao.depoimento_id', '=', $request['depoimento'])
                    ->select('solucaos.*')
                    ->get();
        
        $output = '<table class="table table-striped">
                    <thead>
                        <tr>
                            <th> Id </th>
                            <th> Título </th>
                            <th> Ações </th>
                        </tr>
                    </thead>
                    <tbody>';
        if(isset($obj)) {
            if(count(@$obj) > 0) {
                foreach($obj as $row) {
                    $output .= '
                    
                    <tr>
                    <td>'.$row->id.'</td>
                    <td>'.$row->name.'</td>
                    <td><form action='. route('depoimento.solucao.del') .'
                    method="post" class="">
                    '. method_field('DELETE') .'
                    '. csrf_field() .'
                    <button title="Deletar" class="btn btn-icons btn-inverse-danger btn-delete solucaoDepoimentoDel" 
                        data-token="'. csrf_token() .'" data-depoimento="'.$request['depoimento'].'"  data-solucao="'.$row->id.'">
                        <i class="mdi mdi-delete "></i></button>
                </form></td>
                    </tr>
                    ';
                }

            } else {
                $output .= '<tr>
                                <td colspan="6">Nenhum registro encontrado.</td>
                            </tr>';
            }
        } else {
            $output .= '<tr>
                            <td colspan="6">Nenhum registro encontrado.</td>
                        </tr>';
        }
        $output .= '</tbody></table>';


        $response = array(
            'status' => 'success',
            'msg' => 'Setting created successfully',
            'output' => $output,
        ); 
        return $response;
    }

}
