<?php

namespace App\Http\Controllers;

use App\Models\Equipe;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Nps;
use App\Models\User;
use PhpParser\Node\Expr\AssignOp\Concat;
use Rap2hpoutre\FastExcel\FastExcel;


class ExcelController extends Controller
{
    public function agenda(Request $request){
        $user =  User::find(Auth::user()['id']);   
 
        if(empty($user->getRoleNames()[0]) || $user->getRoleNames()[0] == "Todas as unidades"){
            if(isset($request['unidade']) && !empty($request['unidade']) && $request['unidade'] != "Todas as unidades"){
                $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['unidade'])
                        ->where('nps.status', '!=', 'Executado')
                        ->where('nps.status', '!=', 'Faturado')
                        ->where('solicitacao_desligamentos.data', '>=', $request['date_inicial'])
                        ->where('solicitacao_desligamentos.data', '<=', $request['date_final'])
                        ->orderBy('nps.prazo_execucao', 'asc')
                        ->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('nps.status', '!=', 'Executado')
                            ->where('nps.status', '!=', 'Faturado')
                            ->where('solicitacao_desligamentos.data', '>=', $request['date_inicial'])
                            ->where('solicitacao_desligamentos.data', '<=', $request['date_final'])
                            ->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('nps.status', '!=', 'Executado')
                        ->where('nps.status', '!=', 'Faturado')
                        ->where('solicitacao_desligamentos.data', '>=', $request['date_inicial'])
                        ->where('solicitacao_desligamentos.data', '<=', $request['date_final'])
                        ->orderBy('nps.prazo_execucao', 'asc')
                        ->orderBy('solicitacao_desligamentos.data', 'asc')
                        ->orderBy('solicitacao_desligamentos.inicio', 'asc')
                        ->get();
        }
        
        foreach($notasPs as $key => $nps){
            $desligamento = Nps::find($nps->id)->solicitacao_desligamento()->latest()->first();
           
            if($nps['data'] != $desligamento->data || $nps['encarregado'] != $desligamento->encarregado  || $nps['id_desl'] != $desligamento->id ){
                unset($notasPs[$key]);
                break;
            }   
            
        }

        return (new FastExcel($notasPs))->download('agenda semanal - celesc.xlsx', function ($nps) {

            $encarregado = explode('-', $nps->encarregado);

            return [
                'Data' => date('d/m/Y', strToTime($nps->data)),
                'Semana' => $this->semana($nps->data),
                'Equipe' => $encarregado[0],
                'Alimentador' => $nps->alimentador,
                'Chave abre' => $nps->chave,
                'Circuito de referência' => $nps->circuito,
                'Horário inicial' => date('H:i', strToTime($nps->inicio)),
                'Horário final' => date('H:i', strToTime($nps->termino)),
                'Serviço a executa' => $nps->finalidade,
                'Endereço' => $nps->logradouro . ' - ' . $nps->bairro . ' - ' . $nps->cidade,
                'NPS' => $nps->nps,
                'Quem abre' => $nps->quemabre
            ];
        });
        

    }

    private function semana($date){
        $diasemana = array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sabado');
        $diasemana_numero = date('w', strtotime($date));
        return  $diasemana[$diasemana_numero];
    }
}
