<?php

namespace App\Http\Controllers;

use App\Http\Requests\StoreUpdateTituloRequest;
use App\Models\DocumentoPessoa;
use App\Models\Lote;
use App\Models\LoteTramite;
use App\Models\PessoaLote;
use App\Models\Titulo;
use App\Models\Tramite;
use Illuminate\Http\Request;

class TituloController extends Controller
{
    protected $request;
    //Injeção de dependência
    public function __construct(Request $request, Titulo $titulo)
    {
        $this->request = $request;
        $this->repository = $titulo;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $documentosPessoa = DocumentoPessoa::where('cpf', $this->request->cpf)->with('pessoa')->get();
        foreach ($documentosPessoa as $documentoPessoa) {
            $pessoasLotes = PessoaLote::where('pessoa_id', $documentoPessoa->pessoa_id)->with('lote')->get();
            foreach ($pessoasLotes as $pessoaLote) {
                $lotes = Lote::where('id', $pessoaLote->lote_id)->with('lotesTramites', 'municipio')->get();
                foreach ($lotes as $lote) {
                    $lotesTramites = LoteTramite::where('lote_id', $lote->id)->get();
                    foreach ($lotesTramites as $loteTramite) {
                        $tramites = Tramite::where('id', $loteTramite->tramite_id)->with('setor')->where('documento_tipo', 'TITULO DO IMOVEL')
                            ->where('id', 67)
                            ->get();
                        foreach ($tramites as $tramite) {
                            $titulos = Titulo::where('lote_id', $lote->id)->where('flag_cancelamento', '<>', 'S')->get();
                            foreach ($titulos as $titulo) {
                                // echo "<b>Município: {$lote->municipio->nome}" . " | Título: {$titulo->numero_titulo}" . " | Proprietário: {$lote->proprietario}" .
                                //     " | CPF: {$documentoPessoa->cpf}" . " | Tramite Nome: {$tramite->nome}" . " | Localizacao: {$loteTramite->localizacao_nova}" . " | Lote: {$lote->numero}" . " | Cancelado?:  {$titulo->flag_cancelamento} </b><hr>";
                                //echo "Titulo: " . "{$titulo}<hr>";
                            }
                        }
                    }
                }
            }
            return view(
                'admin.pages.titulos.index',
                [
                    'titulos' => $titulos,
                    'lotes' => $lotes,
                    'documentosPessoa' => $documentosPessoa,
                    'loteTramite' => $loteTramite,
                    'tramite' => $tramite,
                    'pessoasLotes' => $pessoasLotes,
                ]
            );
        }
    }

    //------------------FUNCIONANDO----------------------------------
    //     $documentosPessoa = DocumentoPessoa::where('cpf', $this->request->cpf)->with('pessoa')->get();
    //     foreach ($documentosPessoa as $documentoPessoa) {
    //         $pessoasLotes = PessoaLote::where('pessoa_id', $documentoPessoa->pessoa_id)->with('lote')->get();
    //         foreach ($pessoasLotes as $pessoaLote) {
    //             $lotes = Lote::where('id', $pessoaLote->lote_id)->with('lotesTramites', 'municipio')->get();
    //             foreach ($lotes as $lote) {
    //                 $lotesTramites = LoteTramite::where('lote_id', $lote->id)->get();
    //                 foreach ($lotesTramites as $loteTramite) {
    //                     $tramites = Tramite::where('id', $loteTramite->tramite_id)->with('setor')->where('documento_tipo', 'TITULO DO IMOVEL')
    //                         ->where('id', 67)
    //                         ->get();
    //                     foreach ($tramites as $tramite) {
    //                         $titulos = Titulo::where('lote_id', $lote->id)->where('flag_cancelamento', '<>', 'S')->get();
    //                         foreach ($titulos as $titulo) {
    //                             // echo "<b>Município: {$lote->municipio->nome}" . " | Título: {$titulo->numero_titulo}" . " | Proprietário: {$lote->proprietario}" .
    //                             //     " | CPF: {$documentoPessoa->cpf}" . " | Tramite Nome: {$tramite->nome}" . " | Localizacao: {$loteTramite->localizacao_nova}" . " | Lote: {$lote->numero}" . " | Cancelado?:  {$titulo->flag_cancelamento} </b><hr>";
    //                             //echo "Titulo: " . "{$titulo}<hr>";
    //                         }
    //                     }
    //                 }
    //             }
    //         }
    //         return view(
    //             'admin.pages.titulos.index',
    //             [
    //                 'titulos' => $titulos,
    //                 'lotes' => $lotes,
    //                 'documentosPessoa' => $documentosPessoa,
    //                 'loteTramite' => $loteTramite,
    //                 'tramite' => $tramite,
    //                 'pessoasLotes' => $pessoasLotes,
    //             ]
    //         );
    //     }
    // }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.pages.titulos.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  App\Http\Requests\StoreUpdateTituloRequest  $request
     * @return \Illuminate\Http\Response
     */
    // public function store(StoreUpdateTituloRequest $request)
    // {
    //     $data = $request->all();
    //     $this->repository->create($data);
    //     return redirect()->route('titulos.index');

    // }

    public function store(Request $request)
    {
        return $request->name;
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        if (!$titulo = Titulo::find($id)) {
            return redirect()->back();
        }

        return view('admin.pages.titulos.show', [
            'titulos' => $titulo,
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        if (!$titulo = $this->repository->find($id)) {
            return redirect()->back();
        }

        //dd($titulo);
        // return view('admin.pages.titulos.edit', [
        //     'titulos' => $titulo
        // ]);
        return view('admin.pages.titulos.edit', compact('titulo'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(StoreUpdateTituloRequest $request, $id)
    {
        if (!$titulo = $this->repository->find($id)) {
            return redirect()->back();
        }

        $titulo->update($request->all());
        return redirect()->route('titulos.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (!$titulo = $this->repository->find($id)) {
            return redirect()->back();
        }

        $titulo->delete();

        return redirect()->route('titulos.index');
    }

    public function search(Request $request)
    {
        $filters = $request->except('_token');

        $titulos = $this->repository->search($request->filter);

        return view('admin.pages.titulos.index', [
            'titulos' => $titulos,
            'filters' => $filters,
        ]);

    }
}
