<?php

namespace App\Http\Controllers;

use App\Area;
use App\Atividade;
use App\Evento;
use App\Coautor;
use App\Revisor;
use App\Atribuicao;
use App\Modalidade;
use App\ComissaoEvento;
use App\User;
use App\Proponente;
use App\Trabalho;
use App\AreaModalidade;
use App\Natureza;
use App\CoordenadorComissao;
use App\CampoAvaliacao;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Rules\ExcelRule;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use App\Endereco;
use App\Mail\EventoCriado;
use App\ObjetivoDeDesenvolvimentoSustentavel;
use App\Meta;
use geekcom\ValidatorDocs\Rules\Ddd;
use Illuminate\Support\Facades\Mail;
use ZipArchive;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\DB;


class EventoController extends Controller
{
    public function index(Request $request)
    {
        if ($request->buscar == null) {
            $eventos = Evento::all()->sortBy('nome');
            // $comissaoEvento = ComissaoEvento::all();
            // $eventos = Evento::where('coordenadorId', Auth::user()->id)->get();
            $hoje = Carbon::today('America/Recife');
            $hoje = $hoje->toDateString();
            return view('coordenador.home', ['eventos' => $eventos, 'hoje' => $hoje, 'palavra' => '', 'flag' => 'false']);
        } else {
            $eventos = Evento::where('nome', 'ilike', '%' . $request->buscar . '%')->get();
            $hoje = Carbon::today('America/Recife');
            $hoje = $hoje->toDateString();
            return view('coordenador.home', ['eventos' => $eventos, 'hoje' => $hoje, 'palavra' => $request->buscar, 'flag' => 'true']);
        }
    }

    public function listar()
    {
        //
        $eventos = Evento::all()->sortBy('nome');
        // $comissaoEvento = ComissaoEvento::all();
        // $eventos = Evento::where('coordenadorId', Auth::user()->id)->get();

        return view('evento.listarEvento', ['eventos' => $eventos]);

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $coordenadors = CoordenadorComissao::with('user')->get();
        $naturezas = Natureza::orderBy('nome')->get();
        $yesterday = Carbon::yesterday('America/Recife');
        $ods = ObjetivoDeDesenvolvimentoSustentavel::with('metas')->get();
        $yesterday = $yesterday->toDateString();

        return view('evento.criarEvento', ['coordenadors' => $coordenadors, 'naturezas' => $naturezas, 'ontem' => $yesterday, 'ods' => $ods]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */

    public function store(Request $request)
    {
        /** @var Carbon */
        $mytime = Carbon::now('America/Recife');

        /** @var Carbon */
        $yesterday = Carbon::yesterday('America/Recife');

        /** @var string */
        $yesterday = $yesterday->toDateString();

        /** @var integer */
        $user_id = Auth()->user()->id;

        if (isset($request->docTutorial)) {
            $request->validate([
                'docTutorial' => ['file', 'max:2048', new ExcelRule($request->file('docTutorial'))],
            ]);
        }

        // Validar campos comuns
        $validatedData = $request->validate([
            'nome' => ['required', 'string'],
            'descricao' => ['required', 'string', 'max:1500'],
            'tipo' => ['required', 'string'],
            'natureza' => ['required'],
            'coordenador_id' => ['required'],
            'nome_docExtra' => [Rule::requiredIf($request->check_docExtra != null), 'max:255'],
            'inicioSubmissao' => ['required', 'date', 'after:yesterday'],
            'fimSubmissao' => ['required', 'date', 'after_or_equal:inicioSubmissao'],
            'inicioRevisao' => ['required', 'date', 'after:yesterday'],
            'fimRevisao' => ['required', 'date', 'after:inicioRevisao', 'after:fimSubmissao'],
            'resultado_preliminar' => ['required', 'date', 'after_or_equal:fimRevisao'],
            'inicio_recurso' => ['required', 'date', 'after_or_equal:resultado_preliminar'],
            'fim_recurso' => ['required', 'date', 'after:inicio_recurso'],
            'resultado_final' => ['required', 'date', 'after:fim_recurso'],
            'dt_inicioRelatorioParcial' => $request->dt_inicioRelatorioParcial ? ['date', 'after:resultado_preliminar'] : [],
            'dt_fimRelatorioParcial' => $request->dt_fimRelatorioParcial ? ['date', 'after_or_equal:dt_inicioRelatorioParcial'] : [],
            'dt_inicioRelatorioFinal' => $request->dt_inicioRelatorioFinal ? ['date', 'after:dt_fimRelatorioParcial'] : [],
            'dt_fimRelatorioFinal' => $request->dt_fimRelatorioFinal ? ['date', 'after_or_equal:dt_inicioRelatorioFinal'] : [],
            'pdfEdital' => [($request->pdfEditalPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'],
            'pdfRecurso' => [($request->pdfRecursoPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'],
            'modeloDocumento' => [($request->modeloDocumentoPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'],
        ]);

        // Validação específica para Avaliação por Barema
        if (in_array('barema', $request->tipoAvaliacao)) {
            $validateBarema = $request->validate([
                'pontuacao' => ['required', 'numeric'],
                'inputFieldBarema.*.nome' => ['required', 'string'],
                'inputFieldBarema.*.nota_maxima' => ['required', 'numeric'],
                'inputFieldBarema.*.prioridade' => ['required'],
            ]);
        }

        // Validação específica para Avaliação por Currículo Lattes
        if (in_array('curriculo', $request->tipoAvaliacao)) {
            $validateCurriculo = $request->validate([
                'pontuacao_curriculo' => ['required', 'numeric'],
                'inputFieldCurriculo.*.nome' => ['required', 'string'],
                'inputFieldCurriculo.*.nota_maxima' => ['required', 'numeric'],
                'inputFieldCurriculo.*.prioridade' => ['required'],
            ]);
        }

        // Substituição do tipo "OUTRA" pelo valor informado
        if ($request->tipo === 'OUTRA' && $request->outra_descricao) {
            $request->tipo = $request->outra_descricao;
        }

        // Salvamento do Evento
        $evento = new Evento();
        $evento->nome = $request->nome;
        $evento->descricao = $request->descricao;
        $evento->tipo = $request->tipo;
        $evento->natureza_id = $request->natureza;
        $evento->inicioSubmissao = $request->inicioSubmissao;
        $evento->fimSubmissao = $request->fimSubmissao;
        $evento->inicioRevisao = $request->inicioRevisao;
        $evento->fimRevisao = $request->fimRevisao;
        $evento->inicio_recurso = $request->inicio_recurso;
        $evento->fim_recurso = $request->fim_recurso;
        $evento->resultado_preliminar = $request->resultado_preliminar;
        $evento->resultado_final = $request->resultado_final;
        $evento->quantidade_ods = $request->quantidade_ods;
        if ($request->dt_inicioRelatorioParcial) {
            $evento->dt_inicioRelatorioParcial = $request->dt_inicioRelatorioParcial;
        }
        if ($request->dt_fimRelatorioParcial) {
            $evento->dt_fimRelatorioParcial = $request->dt_fimRelatorioParcial;
        }
        if ($request->dt_inicioRelatorioFinal) {
            $evento->dt_inicioRelatorioFinal = $request->dt_inicioRelatorioFinal;
        }
        if ($request->dt_fimRelatorioFinal) {
            $evento->dt_fimRelatorioFinal = $request->dt_fimRelatorioFinal;
        }

        $evento->coordenadorId = $request->coordenador_id;
        $evento->criador_id = $user_id;
        $evento->numParticipantes = $request->numParticipantes;
        $evento->consu = $request->has('consu');
        $evento->cotaDoutor = $request->has('cotaDoutor');
        $evento->obrigatoriedade_docExtra = $request->has('obrigatoriedade_docExtra');
        $evento->tipoAvaliacao = 'campos'; // ou o valor correto conforme a implementação
        $evento->save(); // Salva o evento primeiro para obter o ID
        // Salvamento dos Campos de Avaliação
        if ($request->has('inputField')) {
            foreach ($request->inputField as $field) {
                $campoAval = new CampoAvaliacao();
                $campoAval->nome = $field['nome'] . '-b'; // Adiciona o sufixo '-b' para Barema
                $campoAval->nota_maxima = $field['nota_maxima'];
                $campoAval->descricao = $field['descricao'] ?? null;
                $campoAval->prioridade = $field['prioridade'];
                $campoAval->evento_id = $evento->id;
                $campoAval->save();
            }
        }

        if ($request->has('inputFieldCurriculo')) {
            foreach ($request->inputFieldCurriculo as $field) {
                $campoAval = new CampoAvaliacao();
                $campoAval->nome = $field['nome'] . '-c'; // Adiciona o sufixo '-c' para Currículo
                $campoAval->nota_maxima = $field['nota_maxima'];
                $campoAval->descricao = $field['descricao'] ?? null;
                $campoAval->prioridade = $field['prioridade'];
                $campoAval->evento_id = $evento->id;
                $campoAval->save();
            }
        }

        // Salvamento dos Anexos
        $this->armazenarAnexosTemp($request, $evento);

        return redirect()->route('admin.editais')->with(['mensagem' => 'Edital criado com sucesso!']);
    }

    /**
     * Armazena os anexos temporários.
     *
     * @return Evento
     */
    public function armazenarAnexosTemp(Request $request, Evento $evento)
    {
        if (!(is_null($request->pdfEdital))) {
            $pasta = 'pdfEdital/' . $evento->id;
            $evento->pdfEdital = Storage::putFileAs($pasta, $request->pdfEdital, 'edital.pdf');
        }
        if (!(is_null($request->modeloDocumento))) {
            $extension = $request->modeloDocumento->extension();
            $path = 'modeloDocumento/' . $evento->id;
            $nome = "modelo" . "." . $extension;
            $evento->modeloDocumento = Storage::putFileAs($path, $request->modeloDocumento, $nome);
        }

        if (!(is_null($request->pdfFormAvalRelatorio))) {
            $pasta = 'pdfFormAvalRelatorio/' . $evento->id;
            $evento->formAvaliacaoRelatorio = Storage::putFileAs($pasta, $request->pdfFormAvalRelatorio, 'formulario_de_avaliacao_do_relatorio.pdf');
        }

        if (!(is_null($request->pdfRecurso))) {
            $pasta = 'pdfRecurso/' . $evento->id;
            $nome = "recurso.pdf";
            $evento->docRecurso = Storage::putFileAs($pasta, $request->pdfRecurso, $nome);
        }

        if (!(is_null($request->pdfRelatorio))) {
            $pasta = 'pdfRelatorio/' . $evento->id;
            $nome = "relatorio.pdf";
            $evento->docRelatorio = Storage::putFileAs($pasta, $request->pdfRelatorio, $nome);
        }

        $evento->anexosStatus = 'final'; // Atualiza o status dos anexos para 'final'
        $evento->save();

        return $evento;
    }

    /** @return Evento */

    /**
     * Display the specified resource.
     *
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $evento = Evento::find($id);
        $proponente = Proponente::where('user_id', Auth::user()->id)->first();
        if ($proponente != null) {
            $hasTrabalho = false;
            $hasFile = false;
            $trabalhos = $proponente->trabalhos()->where('evento_id', $evento->id)->get();
            $trabalhosCount = $proponente->trabalhos()->where('evento_id', $evento->id)->count();

            if ($trabalhosCount != 0) {
                $hasTrabalho = true;
                $hasFile = true;
            }
        } else {
            $hasTrabalho = false;
            $hasFile = false;
            $trabalhos = 0;
            $trabalhosCount = 0;
        }

        $trabalhosId = Trabalho::where('evento_id', $evento->id)->select('id')->get();


        $hoje = Carbon::today('America/Recife');
        $hoje = $hoje->toDateString();
        // dd(false);
        return view('evento.visualizarEvento', [
            'evento' => $evento,
            'trabalhos' => $trabalhos,
            // 'trabalhosCoautor'    => $trabalhosCoautor,
            'hasTrabalho' => $hasTrabalho,
            // 'hasTrabalhoCoautor'  => $hasTrabalhoCoautor,
            'hasFile' => $hasFile,
            'hoje' => $hoje
        ]);
    }

    public function showNaoLogado($id)
    {
        $evento = Evento::find($id);
        $hasTrabalho = false;
        $hasTrabalhoCoautor = false;
        $hasFile = false;
        $trabalhos = null;
        $trabalhosCoautor = null;

        $hoje = Carbon::today('America/Recife');
        $hoje = $hoje->toDateString();
        // dd(false);
        return view('evento.visualizarEvento', [
            'evento' => $evento,
            'trabalhos' => $trabalhos,
            'trabalhosCoautor' => $trabalhosCoautor,
            'hasTrabalho' => $hasTrabalho,
            'hasTrabalhoCoautor' => $hasTrabalhoCoautor,
            'hasFile' => $hasFile,
            'hoje' => $hoje
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $evento = Evento::find($id);

        // Se for uma string, converta para array
        if (is_string($evento->tipoAvaliacao)) {
            $evento->tipoAvaliacao = explode(',', $evento->tipoAvaliacao);
        }

        // Recuperar os campos de avaliação de Barema
        $camposBarema = CampoAvaliacao::where('evento_id', $evento->id)
            ->where('nome', 'LIKE', '%-b') // Filtra os campos de Barema
            ->get();

        // Recuperar os campos de avaliação de Currículo Lattes
        $camposCurriculo = CampoAvaliacao::where('evento_id', $evento->id)
            ->where('nome', 'LIKE', '%-c') // Filtra os campos de Currículo Lattes
            ->get();

        $coordenadores = CoordenadorComissao::with('user')->get();
        $naturezas = Natureza::orderBy('nome')->get();
        $yesterday = Carbon::yesterday('America/Recife')->toDateString();

        return view('evento.editarEvento', [
            'evento' => $evento,
            'coordenadores' => $coordenadores,
            'naturezas' => $naturezas,
            'ontem' => $yesterday,
            'camposBarema' => $camposBarema, // Passa os campos de Barema para a view
            'camposCurriculo' => $camposCurriculo, // Passa os campos de Currículo para a view
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $tipo_usuario = Auth()->user()->tipo;

        $evento = Evento::find($id);
        $yesterday = Carbon::yesterday('America/Recife');
        $yesterday = $yesterday->toDateString();
        $camposAvaliacao = CampoAvaliacao::where('evento_id', $id);
        if (!isset($request->inicioSubmissao) || !isset($request->fimSubmissao) || !isset($request->inicioRevisao) || !isset($request->fimRevisao) || !isset($request->resultado)) {
            if ($request->tipo == 'CONTINUO') {
                $validatedData = $request->validate(Evento::$continuos_dates_rules);
            } else {
                $validatedData = $request->validate(Evento::$dates_rules);
            }
        }

        if ($request->tipo != 'CONTINUO') {
            $validateCampo = $request->validate([
                'inputField.*.nome' => ['required', 'string'],
                'inputField.*.nota_maxima' => ['required'],
                'inputField.*.prioridade' => ['required'],
                'somaNotas' => ['required', 'numeric', 'max:' . $request->pontuacao, 'min:' . $request->pontuacao],
                ['somaNotas.*' => 'A soma das notas máximas deve ser igual a pontuação total definida.']
            ]);

            $evento->inicioRevisao = $request->inicioRevisao;
            $evento->fimRevisao = $request->fimRevisao;
            $evento->inicio_recurso = $request->inicio_recurso;
            $evento->fim_recurso = $request->fim_recurso;
            $evento->resultado_preliminar = $request->resultado_preliminar;
            $evento->resultado_final = $request->resultado_final;
            $evento->dt_inicioRelatorioParcial = $request->dt_inicioRelatorioParcial;
            $evento->dt_fimRelatorioParcial = $request->dt_fimRelatorioParcial;
            $evento->dt_inicioRelatorioFinal = $request->dt_inicioRelatorioFinal;
            $evento->dt_fimRelatorioFinal = $request->dt_fimRelatorioFinal;
            $evento->cotaDoutor = $request->has('cotaDoutor');
            $evento->tipoAvaliacao = 'campos';
        }

        $evento->nome = $request->nome;
        $evento->descricao = $request->descricao;
        $evento->tipo = $request->tipo;
        $evento->natureza_id = $request->natureza;
        $evento->numParticipantes = $request->numParticipantes;
        if ($request->check_docExtra != null) {
            $evento->nome_docExtra = $request->nome_docExtra;
        } else {
            $evento->nome_docExtra = null;
        }

        $evento->inicioSubmissao = $request->inicioSubmissao;
        $evento->fimSubmissao = $request->fimSubmissao;
        $evento->coordenadorId = $request->coordenador_id;
        $evento->consu = $request->has('consu');
        $evento->obrigatoriedade_docExtra = $request->has('obrigatoriedade_docExtra');

        if ($request->pdfEdital != null) {
            $pdfEdital = $request->pdfEdital;
            $path = 'pdfEdital/' . $evento->id . '/';
            $nome = "edital.pdf";
            Storage::putFileAs($path, $pdfEdital, $nome);
        }

        if ($request->modeloDocumento != null) {
            $count = count($request->modeloDocumento);
            $zip = new ZipArchive;
            $filename = "storage/app/modeloDocumento/$evento->id/modelo.zip";

            // Crie o diretório se ele não existir
            if (!file_exists("storage/app/modeloDocumento/$evento->id")) {
                mkdir("storage/app/modeloDocumento/$evento->id", 0777, true);
            }
            $zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
            for ($i = 0; $i < $count; $i++) {
                $zip->addFile($request->modeloDocumento[$i]->getRealPath(), $request->modeloDocumento[$i]->getClientOriginalName());
            }
            $zip->close();
            $evento->modeloDocumento = $filename;
            $evento->save();
        }

        if (isset($request->pdfFormAvalRelatorio)) {
            $pdfFormAvalRelatorio = $request->pdfFormAvalRelatorio;
            $extension = $pdfFormAvalRelatorio->extension();
            $path = 'pdfFormAvalRelatorio/' . $evento->id . '/';
            $nome = "formulario de avaliação do relatorio" . "." . $extension;
            Storage::putFileAs($path, $pdfFormAvalRelatorio, $nome);

            $evento->formAvaliacaoRelatorio = $path . $nome;
        }

        // Editando campos de avaliacao
        if ($request->tipoAvaliacao == 'campos') {
            if ($request->has('campos')) {
                $camposAvaliacao->forceDelete();
                foreach ($request->get('campos') as $key => $value) {
                    $campoAval = new CampoAvaliacao();
                    $campoAval->nome = $request->inputField[$value]['nome'];
                    $campoAval->nota_maxima = $request->inputField[$value]['nota_maxima'];
                    if ($request->inputField[$value]['descricao'] != null) {
                        $campoAval->descricao = $request->inputField[$value]['descricao'];
                    }
                    $campoAval->prioridade = $request->inputField[$value]['prioridade'];
                    $campoAval->evento_id = $evento->id;
                    $campoAval->save();
                }
            }
        }

        // Mudança de tipo de avaliação
        if ($request->tipoAvaliacao != 'campos') {
            //Apaga campos de avaliacao
            $camposAvaliacao->forceDelete();
        }

        $evento->update();

        $eventos = Evento::orderBy('nome')->get();
        //dd('FINAL');
        if ($tipo_usuario == 'coordenador') {
            return redirect(route('coordenador.editais'))->with(['mensagem' => 'Edital salvo com sucesso!', 'eventos' => $eventos]);
        }


        return redirect(route('admin.editais'))->with(['mensagem' => 'Edital salvo com sucesso!', 'eventos' => $eventos]);

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Evento  $evento
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $evento = Evento::find($id);

        // $areas = Area::where('eventoId', $id);
        $atividades = Atividade::where('eventoId', $id);
        $comissao = ComissaoEvento::where('eventosId', $id);
        $revisores = Revisor::where('eventoId', $id);
        $trabalhos = Trabalho::where('evento_id', $id);
        $camposAvaliacao = CampoAvaliacao::where('evento_id', $id);

        // if(isset($areas)){
        //     $areas->delete();
        // }
        if (isset($atividades)) {
            $atividades->delete();
        }
        if (isset($comissao)) {
            $comissao->delete();
        }
        if (isset($revisores)) {
            $revisores->delete();
        }
        if (isset($trabalhos)) {
            $trabalhos->delete();
            Trabalho::withTrashed()->where('evento_id', $id)->update(['evento_id' => null]);
        }
        if (isset($camposAvaliacao)) {
            $camposAvaliacao->delete();
            CampoAvaliacao::withTrashed()->where('evento_id', $id)->update(['evento_id' => null]);
        }

        $pdfEditalPath = 'pdfEdital/' . $evento->id;
        if (Storage::disk()->exists($pdfEditalPath)) {
            Storage::deleteDirectory($pdfEditalPath);
        }

        $modeloDocumentoPath = 'modeloDocumento/' . $evento->id;
        if (Storage::disk()->exists($modeloDocumentoPath)) {
            Storage::deleteDirectory($modeloDocumentoPath);
        }

        DB::table('avaliador_evento')->where('evento_id', $evento->id)->delete();

        $evento->delete();

        return redirect()->back()->with(['mensagem' => 'Edital deletado com sucesso!']);
    }

    public function detalhes(Request $request)
    {
        $evento = Evento::find($request->eventoId);
        $this->authorize('isCoordenador', $evento);

        $ComissaoEvento = ComissaoEvento::where('eventosId', $evento->id)->get();
        // dd($ComissaoEventos);
        $ids = [];
        foreach ($ComissaoEvento as $ce) {
            array_push($ids, $ce->userId);
        }
        $users = User::find($ids);

        $areas = Area::where('eventoId', $evento->id)->get();
        $areasId = Area::where('eventoId', $evento->id)->select('id')->get();
        $trabalhosId = Trabalho::whereIn('areaId', $areasId)->select('id')->get();
        $revisores = Revisor::where('eventoId', $evento->id)->get();
        $modalidades = Modalidade::all();
        $areaModalidades = AreaModalidade::whereIn('areaId', $areasId)->get();
        $trabalhos = Trabalho::whereIn('areaId', $areasId)->orderBy('id')->get();
        $trabalhosEnviados = Trabalho::whereIn('areaId', $areasId)->count();
        $trabalhosPendentes = Trabalho::whereIn('areaId', $areasId)->where('avaliado', 'processando')->count();
        $trabalhosAvaliados = Atribuicao::whereIn('trabalhoId', $trabalhosId)->where('parecer', '!=', 'processando')->count();

        $numeroRevisores = Revisor::where('eventoId', $evento->id)->count();
        $numeroComissao = ComissaoEvento::where('eventosId', $evento->id)->count();
        // $atribuicoesProcessando;
        // dd($trabalhosEnviados);
        $revs = Revisor::where('eventoId', $evento->id)->with('user')->get();

        return view('coordenador.detalhesEvento', [
            'evento' => $evento,
            'areas' => $areas,
            'revisores' => $revisores,
            'revs' => $revs,
            'users' => $users,
            'modalidades' => $modalidades,
            'areaModalidades' => $areaModalidades,
            'trabalhos' => $trabalhos,
            'trabalhosEnviados' => $trabalhosEnviados,
            'trabalhosAvaliados' => $trabalhosAvaliados,
            'trabalhosPendentes' => $trabalhosPendentes,
            'numeroRevisores' => $numeroRevisores,
            'numeroComissao' => $numeroComissao
        ]);
    }

    public function numTrabalhos(Request $request)
    {
        $evento = Evento::find($request->eventoId);
        $this->authorize('isCoordenador', $evento);
        $validatedData = $request->validate([
            'eventoId' => ['required', 'integer'],
            'trabalhosPorAutor' => ['required', 'integer'],
            'numCoautor' => ['required', 'integer']
        ]);

        $evento->numMaxTrabalhos = $request->trabalhosPorAutor;
        $evento->numMaxCoautores = $request->numCoautor;
        $evento->save();

        return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]);
    }

    public function setResumo(Request $request)
    {
        $evento = Evento::find($request->eventoId);
        $this->authorize('isCoordenador', $evento);
        $validatedData = $request->validate([
            'eventoId' => ['required', 'integer'],
            'hasResumo' => ['required', 'string']
        ]);
        if ($request->hasResumo == 'true') {
            $evento->hasResumo = true;
        } else {
            $evento->hasResumo = false;
        }

        $evento->save();
        return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]);
    }

    public function setFotoEvento(Request $request)
    {
        $evento = Evento::find($request->eventoId);
        $this->authorize('isCoordenador', $evento);
        // dd($request);
        $validatedData = $request->validate([
            'eventoId' => ['required', 'integer'],
            'fotoEvento' => ['required', 'file', 'mimes:png']
        ]);

        $file = $request->fotoEvento;
        $path = 'public/eventos/' . $evento->id;
        $nome = '/logo.png';
        Storage::putFileAs($path, $file, $nome);
        $evento->fotoEvento = $path . $nome;
        $evento->save();
        return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]);
    }

    public function areaParticipante()
    {

        $eventos = Evento::all();

        return view('user.areaParticipante', ['eventos' => $eventos]);

    }

    public function listComissao()
    {

        $comissaoEvento = ComissaoEvento::where('userId', Auth::user()->id)->get();
        $eventos = Evento::all();
        $evnts = [];

        foreach ($comissaoEvento as $comissao) {
            foreach ($eventos as $evento) {
                if ($comissao->eventosId == $evento->id) {
                    array_push($evnts, $evento);
                }
            }
        }

        return view('user.comissoes', ['eventos' => $evnts]);

    }

    public function listComissaoTrabalhos(Request $request)
    {

        $evento = Evento::find($request->eventoId);
        $areasId = Area::where('eventoId', $evento->id)->select('id')->get();
        $trabalhos = Trabalho::whereIn('areaId', $areasId)->orderBy('id')->get();

        return view('user.areaComissao', ['trabalhos' => $trabalhos]);
    }

    public function baixarEdital($id)
    {
        $path = "pdfEdital/{$id}/edital.pdf";

        if (Storage::disk('local')->exists($path)) {
            ob_end_clean(); // Resolve problemas de buffer antes do download
            return Storage::download($path, 'edital.pdf');
        }

        return abort(404, 'Arquivo de edital não encontrado.');
    }

    public function baixarModelos($id)
    {
        $path = "modeloDocumento/{$id}/modelo.pdf";

        if (Storage::disk('local')->exists($path)) {
            ob_end_clean();
            return Storage::download($path, 'modelo.pdf');
        }

        return abort(404, 'Arquivo de modelo de documento não encontrado.');
    }

    public function baixarFormularioAvaliacaoRelatorio($id)
    {
        $path = "pdfFormAvalRelatorio/{$id}/formulario_de_avaliacao_do_relatorio.pdf";

        if (Storage::disk('local')->exists($path)) {
            ob_end_clean();
            return Storage::download($path, 'formulario_de_avaliacao_do_relatorio.pdf');
        }

        return abort(404, 'Formulário de avaliação do relatório não encontrado.');
    }

    public function baixarRecurso($id)
    {
        $path = "pdfRecurso/{$id}/recurso.pdf";

        if (Storage::disk('local')->exists($path)) {
            ob_end_clean();
            return Storage::download($path, 'recurso.pdf');
        }

        return abort(404, 'Arquivo de recurso não encontrado.');
    }

    public function baixarRelatorio($id)
    {
        $path = "pdfRelatorio/{$id}/relatorio.pdf";

        if (Storage::disk('local')->exists($path)) {
            ob_end_clean();
            return Storage::download($path, 'relatorio.pdf');
        }

        return abort(404, 'Relatório não encontrado.');
    }
    public function getMetas($odsId)
    { {
            try {
                $ods = ObjetivoDeDesenvolvimentoSustentavel::with('metas')->findOrFail($odsId);
                $response = [
                    'ods' => $ods->nome,
                    'metas' => $ods->metas,
                ];
                return response()->json($response);
            } catch (\Exception $e) {
                return response()->json(['error' => 'Erro ao carregar as metas'], 500);
            }
        }
    }
}
