<?php

namespace App\Http\Controllers;

use App\Models\Nps;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

use App\Models\User;
use App\Models\Agenda;


class AgendaController extends Controller
{
    public function __construct() {
        $this->middleware(['permission:Visualizar Agenda']);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $user =  User::find(Auth::user()['id']);
        $hoje = date('Y-m-d');        
 
        if(empty($user->getRoleNames()[0]) || $user->getRoleNames()[0] == "Todas as unidades"){
            if(isset(request()->query()['unidade']) && !empty(request()->query()['unidade']) && request()->query()['unidade'] != "todas"){
                $notasPs = Nps::select('nps.nps', 'nps.id', 'nps.alimentador', 'nps.chave', 'nps.circuito', 'nps.quemabre', 'nps.status', 'nps.finalidade', 'nps.prazo_execucao', 'nps.cliente', 'nps.logradouro', 'nps.bairro', 'nps.municipio', 'solicitacao_desligamentos.id AS id_desl', 'solicitacao_desligamentos.data', 'solicitacao_desligamentos.inicio', 'solicitacao_desligamentos.termino', 'solicitacao_desligamentos.encarregado', 'nps.cidade')
                        ->leftJoin('solicitacao_desligamentos', 'id_nps', '=', 'nps.id')
                        ->where('nps.cidade', '=', request()->query()['unidade'])
                        ->where('solicitacao_desligamentos.data', '>=', $hoje)
                        ->where('nps.status', '!=', 'Executado')
                        ->where('nps.status', '!=', 'Faturado')
                        ->where('solicitacao_desligamentos.data', '!=', null)
                        ->orderBy('solicitacao_desligamentos.data', 'asc')
                        ->orderBy('solicitacao_desligamentos.inicio', 'asc')
                        ->get();
            }else{
                $notasPs = Nps::select('nps.nps', 'nps.id', 'nps.alimentador', 'nps.chave' , 'nps.circuito', 'nps.quemabre', 'nps.status', 'nps.finalidade','nps.prazo_execucao', 'nps.cliente', 'nps.logradouro', 'nps.bairro', 'nps.municipio', 'solicitacao_desligamentos.id AS id_desl', 'solicitacao_desligamentos.data', 'solicitacao_desligamentos.inicio', 'solicitacao_desligamentos.termino', 'solicitacao_desligamentos.encarregado', 'nps.cidade')
                            ->leftJoin('solicitacao_desligamentos', 'id_nps', '=', 'nps.id')
                            ->where('solicitacao_desligamentos.data', '>=', $hoje)
                            ->where('solicitacao_desligamentos.data', '!=', null)
                            ->where('nps.status', '!=', 'Executado')
                            ->where('nps.status', '!=', 'Faturado')
                            ->orderBy('solicitacao_desligamentos.data', 'asc')
                            ->orderBy('solicitacao_desligamentos.inicio', 'asc')
                            ->orderBy('nps.cidade', 'asc')
                            ->get();
            }
        }else{
            $notasPs = Nps::select('nps.nps', 'nps.id', 'nps.alimentador', 'nps.chave', 'nps.circuito', 'nps.quemabre', 'nps.status', 'nps.finalidade', 'nps.prazo_execucao', 'nps.cliente', 'nps.logradouro', 'nps.bairro', 'nps.municipio', 'solicitacao_desligamentos.id AS id_desl', 'solicitacao_desligamentos.data', 'solicitacao_desligamentos.inicio', 'solicitacao_desligamentos.termino', 'solicitacao_desligamentos.encarregado', 'nps.cidade')
                        ->leftJoin('solicitacao_desligamentos', 'id_nps', '=', 'nps.id')
                        ->where('nps.cidade', '=', $user->getRoleNames()[0])
                        ->where('solicitacao_desligamentos.data', '>=', $hoje)
                        ->where('solicitacao_desligamentos.data', '!=', null)
                        ->where('nps.status', '!=', 'Executado')
                        ->where('nps.status', '!=', 'Faturado')
                        ->orderBy('solicitacao_desligamentos.data', 'asc')
                        ->orderBy('solicitacao_desligamentos.inicio', 'asc')
                        ->get();
        }

             
        foreach($notasPs as $key => $nps){
            $desligamento = Nps::find($nps->id);
            $desligamento = $desligamento->solicitacao_desligamento()->latest()->first();
            
            if($nps['data'] != $desligamento['data'])
            {
                unset($notasPs[$key]);
            }   
            
            if($nps['id_desl'] != $desligamento['id'])
            {
                unset($notasPs[$key]);
            }

        }

        return view('agenda.index', compact('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)
    {
        $this->agenda($request->all());

        $nps = Nps::find($request['id']);
        $id_user = ['id_user' => Auth::user()['id']];

        $nps->historico()->create([
            'id_nps' => $nps->id,
            'id_user' => $id_user['id_user'],
            'descricao' => 'Agendou uma preparação de obra para o dia ' . date("d/m/Y", strToTime($request["data"])) . ', com horario de inicio as ' . $request["inicio"] . ' e termino as ' . $request["termino"]
    
        ]);

        $request->session()->flash('success', 'Preparação da obra agendada com sucesso');

        return redirect()->route('nps.show', ['np' => $request['id']]);
    }

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

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

    private function agenda($request){

        Agenda::create([
            'data' => $request['data'],
            'inicio' => $request['inicio'],
            'termino' => $request['termino'],
            'nps_id' => $request['id'],
            'servico' => 'Preparação',
            'encarregado' =>$request['encarregado'],
            'substituto' => $request['substituto'],
        ]);

    }
}
