<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

use App\Models\Nps;
use App\Models\Equipe;
use App\Models\User;

class FinanceiroController extends Controller
{
    public function __construct() {
        $this->middleware(['permission:Visualizar financeiro|Editar financeiro']);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $user =  User::find(Auth::user()['id']);
        $cidade =  $user->getRoleNames()[0];

        $npsPrevisto = Nps::where('status', '!=', "Executado")->where('status', '!=', "Faturado")->get();
        $npsExecutadas = Nps::where('status', "Executado")->get();
        $npsFaturadas = Nps::where('status', "Faturado")->where('updated_at', '>=', date("Y-m-01"))->where('updated_at', '<=', date("Y-m-t"))->get();

        if($cidade != "Todas as unidades" || isset(request()->query()['unidade']) && request()->query()['unidade'] != "todas"){
            if(isset(request()->query()['unidade'])){
                $cidade = request()->query()['unidade'];
            }

            $npsPrevisto = Nps::where('status', '!=', "Executado")->where('status', '!=', "Faturado")->where('cidade', $cidade)->get();
            $npsExecutadas = Nps::where('status', "Executado")->where('cidade', $cidade)->get();
            $npsFaturadas = Nps::where('status', "Faturado")->where('cidade', $cidade)->where('updated_at', '>=', date("Y-m-01"))->where('updated_at', '<=', date("Y-m-t"))->get();
        }

        $previsto = $this->numerosFinanceiros($npsPrevisto);
        $executado = $this->numerosFinanceiros($npsExecutadas);
        $faturado = $this->numerosFinanceiros($npsFaturadas);

        if(isset(request()->query()['filtro']) && request()->query()['filtro'] == "Executado"){
            $notasPs = $npsExecutadas; 
        }else{
            $notasPs = $npsFaturadas; 
        }
        
        return view('financeiro.index', compact(['previsto', 'executado', 'faturado', 'notasPs']));
    }

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

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * 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)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $nps = Nps::find($id);
        $status = $request['status'];

        $nps->update(['status' => $status]);

        $nps->historico()->create([
            'id_nps' => $nps->id,
            'id_user' => Auth::user()['id'],
            'descricao' => 'Mudou o status da Nota PS para '.  strtoupper($status)
        ]);

        $request->session()->flash('success', 'Nota PS ' . $nps->nps . ' mudada o status para Faturada');
        return redirect()->back();
    }

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

    private function numerosFinanceiros($nps){
        $valor = 0;
        $quant = 0;
        foreach ($nps as $nps) {
            $valor += $nps->previsto;
            $quant++;
        }

        return array("quant" => $quant, "valor" => $valor);
    }
}
